Cómo filtrar un array único y sumar los duplicados en php?
Viene de una API, así que no tengo ningún control sobre ella.
He utilizado json_decode($response, true) antes de obtener este resultado:
Array
(
[0] => Array
(
[status] => ok
[res] => Array
(
[0] => Array
(
[id] => C_6
[image_url] => https://www.example.com/pic.png
[cat_id] => F_1
[cat_name] => Mariscos
[date] => 2020-11-09 22:02:56
)
[1] => Array
(
[id] => C_6
[image_url] => https://www.example.com/pic1.png
[cat_id] => F_1
[cat_name] => Mariscos
[date] => 2020-11-09 12:12:20
)
[2] => Array
(
[id] => C_6
[image_url] => https://www.example.com/pic2.png
[cat_id] => F_2
[cat_name] => Plato Europeo
[date] => 2020-11-09 20:05:62
)
)
[none] =>
)
)
Ahora quiero filtrar el resultado en base a la singularidad de este elemento [date], y solo quiero que todas las fechas sean únicas y los valores duplicados se sumen de esta manera:
Hay 2 “Mariscos” con la misma fecha pero con marcas de tiempo diferentes (eso lo he descubierto al descomponerlo y sacar solo la fecha).
Pero solo quiero considerar duplicados aquellos que tienen la misma fecha para la misma categoría (como Mariscos).
Si en algún caso hay 3 arrays con 2 fechas iguales y una fecha diferente pero la misma categoría, entonces será 2~1ª fecha y 1~2ª fecha.
Mariscos-2020-11-09 + Mariscos-2020-11-09 = 2 Mariscos el 2020-11-09
Entonces, en total es:
2 Mariscos, 1 Plato Europeo
davy.ai
Para filtrar el resultado basado en la unicidad del elemento date y sumar los valores duplicados, puedes seguir estos pasos:
foreach
.date
ycat_name
de cada subarray usando$item['date']
y$item['cat_name']
.date
en fecha y hora utilizando$date_arr = explode(' ', $item['date'])
.$date = $date_arr[0]
.date
ycat_name
ya existe en el array filtrado utilizandoarray_key_exists($date.'_'.$cat_name, $filtered_arr)
.$filtered_arr[$date.'_'.$cat_name] = array('cat_name' => $cat_name, 'date' => $date, 'count' => 1)
.$filtered_arr[$date.'_'.$cat_name]['count']++
.Aquí tienes el código en PHP para implementar los pasos anteriores:
Esto imprimirá:
Ten en cuenta que puedes ajustar el formato de la salida para que coincida con tus requisitos específicos.