Tengo una matriz de PHP que se parece a esto:
Index Key Value
[0] 1 Awaiting for Confirmation
[1] 2 Assigned
[2] 3 In Progress
[3] 4 Completed
[4] 5 Mark As Spam
Cuando var_dump los valores de la matriz, obtengo esto:
array(5) { [0]=> array(2) { ["key"]=> string(1) "1" ["value"]=> string(25) "Awaiting for Confirmation" } [1]=> array(2) { ["key"]=> string(1) "2" ["value"]=> string(9) "Assigned" } [2]=> array(2) { ["key"]=> string(1) "3" ["value"]=> string(11) "In Progress" } [3]=> array(2) { ["key"]=> string(1) "4" ["value"]=> string(9) "Completed" } [4]=> array(2) { ["key"]=> string(1) "5" ["value"]=> string(12) "Mark As Spam" } }
Quería eliminar Completado y Marcar como spam . Sé que puedo unset[$array[3],$array[4])
, pero el problema es que a veces el número de índice puede ser diferente.
¿Hay alguna forma de eliminarlos haciendo coincidir el nombre del valor en lugar del valor clave?
Respuestas:
Su matriz es bastante extraña: ¿por qué no usar el
key
índice as, y elvalue
as ... el valor?¿No sería mucho más fácil si su matriz se declarara así:
Eso le permitiría usar sus valores de
key
como índices para acceder a la matriz ...Y podrá usar funciones para buscar los valores, como
array_search()
:Más fácil que con tu matriz, ¿no?
En cambio, con su matriz que se ve así:
Tendrá que recorrer todos los elementos para analizarlos
value
y desarmar los elementos correctos:Incluso si es posible, no es tan simple ... e insisto: ¿no puede cambiar el formato de su matriz para trabajar con un sistema clave / valor más simple?
fuente
fuente
Para matrices 2D ...
fuente
Puedes usar esto
fuente
¿Por qué no utilizar array_diff?
Solo tenga en cuenta que su matriz se volverá a indexar.
fuente
Prueba esto:
/ edit Como mencionó JohnP, este método solo funciona para matrices no anidadas.
fuente
La forma de hacer esto es tomar su matriz de destino anidada y copiarla en un solo paso a una matriz no anidada. Elimine la (s) clave (s) y luego asigne la matriz recortada final al nodo anidado de la matriz anterior. Aquí hay un código para hacerlo simple:
fuente
Estoy un poco en desacuerdo con la respuesta aceptada. A veces, la arquitectura de una aplicación no quiere que se meta con la identificación de la matriz o la hace inconveniente. Por ejemplo, utilizo mucho CakePHP y una consulta de base de datos devuelve la clave principal como un valor en cada registro, muy similar al anterior.
Suponiendo que la matriz no es estúpidamente grande, usaría array_filter. Esto creará una copia de la matriz, menos los registros que desea eliminar, que puede asignar de nuevo a la variable de matriz original.
Aunque esto puede parecer ineficiente, en realidad está muy de moda en estos días que las variables sean inmutables, y el hecho de que la mayoría de las funciones de matriz de php devuelvan una nueva matriz en lugar de jugar con la original implica que PHP quiere que usted también haga esto. Y cuanto más trabajas con matrices y te das cuenta de lo difícil y molesta que es la función unset (), este enfoque tiene mucho sentido.
De todas formas:
Puede usar cualquier lógica de inclusión (por ejemplo, su campo de identificación) en la función incrustada que desee.
fuente
para uso de elemento de matriz única
reset($item)
fuente