
Vamos a ver como podemos filtrar los valores de un array con PHP con la función array_filter() de PHP podemos filtrar los valores de un array para así mostrar, solo lo que nos interesa.
Por ejemplo vamos a mostrar solo los números pares que hay en un array:
1 2 3 4 5 6 7 | $arrayWithNumbersRandoms = array (2, 4, 5, 11, 17, 18, 20, 21, 23); $pairs = array_filter( $arrayWithNumbersRandoms, function($array) { return ($array % 2 == 0); } ); |
Aquí en la variable $pairs, nos guardará tan solo los números pares.
Podríamos incluso aplicar un print_r o var_dump a la función array_filter() si no necesitamos guardar el resultado en una variable.
O ya sea para filtrar un listado de archivos de una conexión ftp.
1 2 3 4 5 6 | $files = array_filter( $arraWithFilesFromFTP, function ($array) { return (stripos($array, '.xml')); } ); |
Como veis de una forma muy sencilla podemos filtrar los arrays y devolver otro array con tan solo una función.
Si la función a realizar, fuera mucho más compleja, podríamos llamarla como una función sin problemas de la siguiente manera:
1 2 3 4 5 6 7 8 9 | $arrayWithNumbersRandoms = array (2, 4, 5, 11, 17, 18, 20, 21, 23); function isPair($array) { return ($array % 2 == 0); } $pairs = array_filter( $arrayWithNumbersRandoms, "isPair" ); |
Espero que os sirva para vuestros códigos.
Y recordad! No olvidéis comentar! Vuestro código y en el Blog 😉
JOSE BORGES
Bien explicado de forma sencilla.. gracias por compartir..
Oyagum
Gracias a ti por comentar. Y me alegro que te haya servido de ayuda;)
Jose
Cool!
Como te lo montarias si tuvieses un array multidimensional y debieses separar por meses por ejemplo?
Gracias!!!
Oyagum
Buenas Jose,
Primero de todo gracias por leerme y por comentar. No acabo de ver bien bien el problema que tienes, y me gustaría ayudarte, me lo podrías explicar un poco más?
Te lo agradecería y miraré de ayudarte con lo que sea.
Un saludo!
Jose
Que tal Oyagum!
No pues nada, sólo me preguntaba la manera más óptima de teniendo un array de datos del palo
array(3) {
[0]=> array(10) { …. [5]=> string(10) «2020-09-05» [«Fecha_Entrada»]=> string(10) «2020-09-05» …..}
[1]=> array(10) { … [5]=> string(10) «2020-09-05» [«Fecha_Entrada»]=> string(10) «2020-09-05″… }
[2]=> array(10) { …. [5]=> string(10) «2020-09-05» [«Fecha_Entrada»]=> string(10) «2020-09-05″…. }
}
Con muchos mas campos claro y tal, pero siendo la clave para mi pregunta, la fecha de entrada, me preguntaba cual sería la mejor manera de tener los elementos del array por mes o tal vez por x fecha que le pase y sacar un sumatorio por mes etc.
Nada que llegué por acá viendo como optimizar el obtener x elementos de un array y di con tu web y tu post 🙂
Gracias por responder so fast!
Oyagum
Creo que lo mejor en tu caso sería utilizar la función array_walk() de PHP, almenos lo que pienso, he visto aquí un ejemplo:
https://3v4l.org/NvLB8
Porqué aquí al final lo que hacemos es filtrar un array en busca de algo en concreto, así que lo único así rápido que podíamos hacer es filtrar por esa fecha y luego que con eso trabajes.
Lo único que veo que podrías llegar a hacer es algo como esto:
<?php
$array = array(
array('date' => '2020-02-20', 'cash' => '10'),
array('date' => '2020-02-28', 'cash' => '15'),
array('date' => '2020-03-19', 'cash' => '20'),
);
$dateToFilter = '2020-02';
$totalSum = 0;
$result = array_filter($array, function ($item) use ($dateToFilter) {
global $totalSum;
if (stripos($item['date'], $dateToFilter) !== false) {
$totalSum = $totalSum + $item['cash'];
}
return false;
});
echo $totalSum;
?>
Pero yo creo que te sirve mejor la función array_walk.
Bueno espero haberte servido de ayuda, un saludo!