2008-10-21 14 views
16

Después de usar array_unique, se elimina una matriz sin los valores duplicados. Sin embargo, parece que las claves también se eliminan, lo que deja huecos en una matriz con índices numéricos (aunque está bien para una matriz asociativa). Si repito usando un ciclo for, tengo que dar cuenta de los índices que faltan y simplemente copiar las claves a un nuevo conjunto, pero eso parece torpe.En PHP, ¿cómo puedo corregir las teclas faltantes en una matriz?

Respuesta

39

$foo = array_values($foo); volverá a número de una matriz para que

+0

Wow. Leí la lista de funciones de matriz y la olvidé por completo. Gracias. –

1

En lugar de utilizar los bucles Parece que usted debe usar foreach. Aparentemente, no te importan los índices de todos modos, ya que los estás volviendo a numerar.

Este bucle:

for ($i = 0; $i < $loopSize; $i++) 
{ 
process($myArray[$i]); 
} 

convierte en

foreach($myArray as $key=> $value) 
{ 
    process($value); 
    /** or process($myArray[$key]); */ 
} 

or even more simply 


foreach($myArray as $value) 
{ 
    process($value); 
} 
0

En los pocos casos que he intentado usar para en lugar de foreach, pronto se arrepintió.

Siempre se puede evitar, incluso se puede utilizar foreach pero ignorar los valores y usar la tecla, casi olvidando que es un foreach en lugar de hacerlo, pero evitando cualquier espacio en las llaves y teniendo automáticamente sus límites a su cuidado sin funciones de longitud/min/max ni nada.

ex.

foreach($myArray as $key=>$val) 
{ 
    myArray[$key] = myFunction(myArray[$key]); 
} 

Lo he encontrado particularmente útil con matrices paralelas.

$a = getA(); $b = getB(); 
foreach($a as $key=>val) 
{ 
    $sql = "INSERT INTO table (field1, field2) VALUES ($a[$key], $b[$key])"; 
} 
Cuestiones relacionadas