Acabo de usar array_filter para eliminar las entradas que solo tenían el valor '' de una matriz, y ahora quiero aplicar ciertas transformaciones en función del marcador de posición a partir de 0, pero desafortunadamente aún conserva el índice original. Busqué por un tiempo y no pude ver nada, tal vez simplemente me perdí lo obvio, pero mi pregunta es ...
¿Cómo puedo restablecer fácilmente los índices de la matriz para que comiencen en 0 y vayan en orden en la NUEVA matriz, en lugar de que conserve los índices antiguos?
array_filter()
; puede purgar más de lo que pretende. Aquí hay una explicación con una demostración: stackoverflow.com/a/43657056/2943403Respuestas:
Si llama
array_values
a su matriz, se volverá a indexar desde cero.fuente
Si está utilizando un filtro de matriz, hágalo de la siguiente manera
fuente
Me preocupa cuántos programadores han copiado / pegado inocentemente el
array_values(array_filter())
método en sus códigos ; me pregunto cuántos programadores sin saberlo se encontraron con problemas debido a la codicia de array_filter. O peor aún, cuántas personas nunca descubrieron que la función elimina demasiados valores de la matriz ...Presentaré una mejor alternativa para el proceso de dos partes de quitar
NULL
elementos de una matriz y volver a indexar las claves.Sin embargo, primero, es extremadamente importante que
array_filter()
haga hincapié en la naturaleza codiciosa y cómo esto puede destrozar silenciosamente su proyecto. Aquí hay una matriz con valores mixtos que expondrá el problema:Los valores nulos se eliminarán independientemente de mayúsculas / minúsculas.
Pero mire lo que queda en la matriz cuando usamos array_values () & array_filter () :
Matriz de salida ($ matriz):
Ahora mire lo que obtiene con mi método que usa array_walk () & is_null () para generar una nueva matriz filtrada:
Esto se puede escribir en varias líneas para facilitar la lectura / explicación:
Matriz de salida ($ filtro):
Con mi método, obtiene sus claves reindexadas, todos los valores no nulos y ninguno de los valores nulos. Una sola línea limpia, portátil y confiable para todas sus necesidades de filtrado nulo de arreglos. He aquí una demostración .
De manera similar, si desea eliminar elementos vacíos, falsos y nulos (conservando ceros), estos cuatro métodos funcionarán:
o
o
o
Salida:
Finalmente, para cualquiera que prefiera la sintaxis de construcciones de lenguaje, también puede simplemente insertar valores de calificación en una nueva matriz para emitir nuevos índices.
fuente
array_values(array_filter($arr, function($el) {return $el !== '';}))
? Esa parece la forma natural de hacer lo que pide el OP.array_filter()
menos que su conocimiento íntimo de los datos permita un filtrado codicioso sin efectos secundarios. (Una advertencia adicional: seempty()
comporta de la misma manera y también incluye una matriz vacía en su codicia.)array_filter()
se comporta exactamente como cabría esperar en función de lo que dice en el manual: php.net/manual/en/function.array-filter.php "Si no se proporciona ninguna devolución de llamada, todas las entradas de la matriz son iguales a FALSE (consulte conversión a boolean ) será eliminado ". Y debería ser de conocimiento común entre los programadores de PHP que 0, nulo, falso, '' y '0' se evalúan como falso cuando se coaccionan a booleano.Utilizar
array_values()
:fuente