Actualizar: Solo pensé en mencionar que este método usa el PHP Iteradores SPL.
Salathe Editar:
Una forma simple (relativamente) de filtrar las claves y sumar los valores (sin escribir un iterador personalizado) sería filtrar con un RegexIteratorconvierta el iterador resultante en una matriz y utilice la práctica array_sum función en él. Esto es puramente un ejercicio académico y ciertamente no lo recomendaría como el mejor manera de lograr esto… sin embargo, es solo una línea de código. 🙂
$sum = array_sum(
iterator_to_array(
new RegexIterator(
new RecursiveIteratorIterator(
new RecursiveArrayIterator($array)
),
'/^pv$/D',
RegexIterator::MATCH,
RegexIterator::USE_KEY
),
false
)
);
+1! ¡Este también es agradable! No requiere una función adicional y no abarrota el espacio de nombres. ¡Me gusta!
– jwueller
23 de septiembre de 2010 a las 12:11
+1 para IteratorIterator Recientemente usé esto para recorrer directorios para encontrar ciertos archivos con RegexIteratorIterator.
– Chris
23 de septiembre de 2010 a las 12:18
+1: Además, incluso podría agregar un FilterIterator y no tener que preocuparse por la parte `if($key == ‘pv’)“… Pero esto es correcto de cualquier manera…
– ircmaxell
23 de septiembre de 2010 a las 12:27
@ircmaxell, @erisco Cue ridículo comentario de una sola línea… $sum = array_sum(iterator_to_array(new RegexIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($array)), '/^pv$/D', RegexIterator::MATCH,RegexIterator::USE_KEY), false));
– Salathe
24 de septiembre de 2010 a las 8:45
Sí, eso es ridículo. Una muestra impresionante de lo que puedes hacer con SPL, pero sigue siendo ridícula.
– ircmaxell
24 de septiembre de 2010 a las 11:07
Ali Sattari
puedes usar array_reduce o array_walk_recursive funciones y una función de devolución de llamada personalizada de usted mismo:
+1! ¡Este también es agradable! No requiere una función adicional y no abarrota el espacio de nombres. ¡Me gusta!
– jwueller
23 de septiembre de 2010 a las 12:11
+1 para IteratorIterator Recientemente usé esto para recorrer directorios para encontrar ciertos archivos con RegexIteratorIterator.
– Chris
23 de septiembre de 2010 a las 12:18
+1: Además, incluso podría agregar un FilterIterator y no tener que preocuparse por la parte `if($key == ‘pv’)“… Pero esto es correcto de cualquier manera…
– ircmaxell
23 de septiembre de 2010 a las 12:27
@ircmaxell, @erisco Cue ridículo comentario de una sola línea… $sum = array_sum(iterator_to_array(new RegexIterator(new RecursiveIteratorIterator(new RecursiveArrayIterator($array)), '/^pv$/D', RegexIterator::MATCH,RegexIterator::USE_KEY), false));
– Salathe
24 de septiembre de 2010 a las 8:45
Sí, eso es ridículo. Una muestra impresionante de lo que puedes hacer con SPL, pero sigue siendo ridícula.
– ircmaxell
24 de septiembre de 2010 a las 11:07
marca panadero
$sum = 0;
function sumArray($item, $key, &$sum)
{
if ($key == 'pv')
$sum += $item;
}
array_walk_recursive($array, 'sumArray',&$sum);
echo $sum;
Funciona siempre que no haya nada más que matrices y números con la clave pv.
– fredley
23 de septiembre de 2010 a las 11:55
@fredley: si el OP tiene criterios adicionales (por ejemplo, prueba de booleanos, etc.), se pueden agregar fácilmente a la función de devolución de llamada sumArray
– Marcos Baker
23 de septiembre de 2010 a las 11:57
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
Medoo: stackoverflow.com/questions/3777134/…, stackoverflow.com/questions/3776798/php-array-recursion, …
– la noche
23 de septiembre de 2010 a las 11:57