2010-11-08 32 views
13

¿Es posible eliminar una cadena (ver ejemplo a continuación) de una matriz de PHP sin conocer el índice?¿Eliminar cadena de la matriz de PHP?

Ejemplo:

array = array("string1", "string2", "string3", "string4", "string5"); 

I necesidad de eliminar string3.

Respuesta

23
$index = array_search('string3',$array); 
if($index !== FALSE){ 
    unset($array[$index]); 
} 

si considera que su valor estará en no más de una vez trate de usar array_keys con un valor de búsqueda para obtener todos los índices. Es probable que desee para asegurarse de

EDIT:

Tenga en cuenta, que los índices se mantienen sin cambios cuando se utiliza unset. Si esto es un problema, hay una buena respuesta here que muestra cómo hacerlo usando array_splice.

+0

Me gusta este +1 por ti. Pero, ¿cómo puedo confirmar que se eliminó (mostrar en la pantalla)? –

+0

Comprueba las funciones php print_r y var_dump. Puede usarlos para volcar el contenido de su matriz. – GWW

+0

tenga en cuenta que el uso de unset() mantendrá los índices intactos: http://stackoverflow.com/a/369761/176140 – schellmax

1

Depende de qué tan grande sea la matriz, y hay múltiples opciones.

Si es típicamente bastante pequeño, array_diff es probablemente la solución más rápida y coherente, como publicó Jorge.

Otra solución para los conjuntos de poco más grandes:

$data = array_flip($data); 
unset($data[$item2remove]); 
$data = array_flip($data); 

Pero eso es sólo es bueno si usted no tiene elementos duplicados. Dependiendo de su carga de trabajo, puede ser ventajoso también garantizar la exclusividad de los artículos.

4

Puede hacerlo.

$arr = array("string1", "string2", "string3", "string4", "string5"); 
$new_arr=array(); 
foreach($arr as $value) 
{ 
    if($value=="string3") 
    { 
     continue; 
    } 
    else 
    { 
     $new_arr[]=$value; 
    }  
} 
print_r($new_arr); 
3

utilizar una combinación de array_search y array_splice.

function array_remove(&$array, $item){ 
    $index = array_search($item, $array); 
    if($index === false) 
    return false; 
    array_splice($array, $index, 1); 
    return true; 
} 
2

Esto probablemente no es el método más rápido, pero es un breve y ordenada una línea de código:

$array = array_diff($array, array("string3")) 

o si está usando PHP> 5.4.0 o superior:

$array = array_diff($array, ["string3"]) 
+1

Me marcó su método contra GWW en un bucle for que se ejecuta 2,5 millones de veces. Tu completado en 18 segundos (17 segundos cuando no usé variables), mientras que GWW se completó en 16 segundos. Por lo tanto, 'array_diff' es más lento ya que se trata de una matriz en lugar de una única cadena, lo que provoca una sobrecarga. Si solo hubiera una función como 'array_diff' pero para eliminar una sola cadena en una matriz. – FluorescentGreen5