2010-07-15 20 views
6

¡Esta es probablemente una pregunta simple para usted php whizzes por ahí pero parece que no puedo encontrar una respuesta en Google!Cambiar las teclas del Array a numérico en PHP

que tienen una matriz multidimensional que por primera vez un conjunto de teclas se nombran y quiero convertirlas en números como 0, 1, 2 ..

Si se trata de una matriz normal, pude establecer newArray $ = array_values ​​($ multiArr); ¡y eliminaría las claves y las convertiría en numéricas! Pero dado que es multidimensional, hay otro conjunto de claves/valores debajo de esto.

¿Debo de alguna manera usar un bucle para recorrerlo y definir cada uno? Pero entonces, ¿cómo iba a especificar la clave actual?

¡Algún consejo ayudaría! ¡Gracias!

si esto ayuda a todos los datos que entra es un JSON recibido desde un dispositivo y hay algo mal con la codificación de lo que los datos se ve así:

 
`Array 
(
    [�w� ��߯19�] => Array 
     (
      [down] => 1279146141431 
      [up] => 1279146351453 
     ) 
`

por eso es necesario para conseguir de alguna manera el acceso a la datos debajo de cada llave loca.

Respuesta

23

este código:

$arr = array(
    'a' => array('a' => '1', 'b' => '2', 'c' => '3'), 
    'b' => array('d' => '4', 'e' => '5', 'f' => '6'), 
    'c' => array('g' => '7', 'h' => '8', 'i' => '9'), 
); 
$arr2 = array_values($arr); 

rinde $ arr2 en esta forma:

[0] => Array 
    (
     [a] => 1 
     [b] => 2 
     [c] => 3 
    ) 

[1] => Array 
    (
     [d] => 4 
     [e] => 5 
     [f] => 6 
    ) 

[2] => Array 
    (
     [g] => 7 
     [h] => 8 
     [i] => 9 
    ) 

no es eso lo que está tratando de conseguir?

+0

esto funciona, no me daba cuenta de esto podría ser utilizado como éste, gracias tanto! –

+0

Sí, array_values ​​() no altera los niveles inferiores de la matriz. – JavadocMD

+0

Sus datos de prueba son ** no ** una matriz multidimensional, * keyed *. Sus arrays de 2da profundidad ya están indexados desde 0 hacia arriba. –

0

No entendí del todo la estructura de su matriz, pero puede iterar a través de una matriz asociativa multidimensional de varias maneras. Aquí hay uno que construye un arreglo indexado numéricamente:

$multiArray = Array(/* stuff */); 
$numericArray = Array(); 
foreach ($multiArray as $key => $val) { 
    foreach ($val as $childKey => $childVal) { 
     // do something else? 
    } 
    $numericArray []= $val; 
} 
1

Un poco recursividad hace el truco

$data = array(
    'foo' => 'bar' 
    , 'bar' => 'baz' 
    , 'baz' => array(
     'foo' => 'bar' 
     , 'bar' => 'baz' 
     , 'baz' => array(
      'foo' => 'bar' 
      , 'bar' => 'baz' 
      , 'baz' => 'foo' 
     ) 
    ) 
    , 'foo2' => 'bar' 
    , 'bar2' => 'baz' 
    , 'baz2' => array(
     'foo' => 'bar' 
     , 'bar' => 'baz' 
     , 'baz' => 'foo' 
    ) 
); 

print_r($data); 

$data = removeKeys($data); 

print_r($data); 

function removeKeys(array $array) 
{ 
    $array = array_values($array); 
    foreach ($array as &$value) 
    { 
    if (is_array($value)) 
    { 
     $value = removeKeys($value); 
    } 
    } 
    return $array; 
} 
+0

"Tengo una matriz multidimensional que * primer conjunto * de claves se nombran y quiero cambiarlas en números como 0, 1, 2 ..." Esto indicaría que el póster original solo quiere volver a indexar la primera nivel. – JavadocMD

+0

¡Esto era exactamente lo que estaba buscando! ¡Gracias! –

Cuestiones relacionadas