2009-08-17 21 views
17

¿Hay una función de PHP para eliminar ciertos elementos de la matriz de una matriz?¿Cómo eliminar valores de una matriz en PHP?

P. ej., Tengo una matriz (A) con valores y otra matriz (B) de la cual es necesario eliminar los valores.

¿Desea eliminar los valores en el conjunto A del conjunto B?

+0

No puedo ayudar pero me he estado preguntando lo mismo +1 sobre la pregunta – JasonDavis

Respuesta

31

Uso array_diff()

$new_array = array_diff($arrayB, $arrayA); 

devolverá una tabla con todos los elementos de $arrayB que son no en $arrayA.

Para hacer esto con matrices asociativas use array_diff_assoc().

Para eliminar un solo uso valor:

unset($array[$key]); 

Puede, por supuesto bucle que para hacer el equivalente de las funciones de matriz, pero no tiene sentido en eso.

1
$array1 = array("a" => "green", "red", "blue", "red"); 
$array2 = array("b" => "green", "yellow", "red"); 
$result = array_diff($array1, $array2); 

print_r($result); 
5

Depende de lo que quiere decir con "eliminar".

Puede usar la función unset() para eliminar las claves de su matriz, pero esto no lo reindexará. Así, por ejemplo, si tiene:

$a = array(1 => 'one', 2 => 'two', 3 => 'three'); 

y luego llamar

unset($a[2]); 

Usted va a terminar con algo como

(1 => 'one', 3 => 'three'); 

Si necesita la matriz para ser indexados de forma secuencial , puede tomar el conjunto no ajustado y alimentarlo en array_values ​​(), que devolverá un nuevo conjunto con claves indexadas secuencialmente.

Volviendo a su escenario original, como otros observan, array_diff hará el trabajo por usted, pero tenga en cuenta que no hace una verificación de índice. Si lo necesita, use array_diff_assoc, en su lugar.

1

Vine acros esta publicación buscando una manera de eliminar un solo valor de una matriz (que el título indica). Aquí está una manera directa, asumiendo el valor de eliminar está en la matriz:

$list = array('foo', 'bar', 'yay', '\o/'); 
$toremove = 'foo'; 
unset($list[array_search($toremove, $list)]); 

Aunque esto va a tirar errores si el elemento a eliminar no es parte de la matriz.

Otra solución, pero no el rendimiento optimizado realmente sabia es:

$list = array('foo', 'bar', 'yay', '\o/'); 
$toremove = 'foo'; 
$list = array_flip($list); 
unset($list[$toremove]); 
$list = array_flip($list); 

De todos modos, tal vez la creación de una matriz con el valor único como el uso de array_diff según lo sugerido por todo el mundo aquí es más rápido y más eficiente.

1

Quizás una solución simple y más rápida es esta. Una reiteración simple que puede eliminar (deshacer) múltiples valores en la matriz.

// Your array 
    $list = array("apple", "orange", "strawberry", "lemon", "banana"); 

    // Initilize what to delete 
    $delete_val = array("orange", "lemon", "banana"); 

    // Search for the array key and unset 
    foreach($delete_val as $key){ 
     $keyToDelete = array_search($key, $list); 
     unset($list[$keyToDelete]); 
    } 
Cuestiones relacionadas