Reordenar un array con indices desordenados en php (drupal)

Posted by alexmoreno on Fri, 30/12/2011 - 20:03

En Drupal es muy muy normal obtener algunas consultas de arrays de este tipo:

Array ( [1320] => stdClass Object ( [tid] => 1320 [vid] => 14 [name] => que ver [description] => [weight] => 0 [language] => [trid] => 0 ) [109] => stdClass Object ( [tid] => 109 [vid] => 5 [name] => Corfu [description] => [weight] => 0 [language] => [trid] => 0 ) ) corfu/que-ver-en-corfu/museo-arqueologicos-de-corfu

Fijaos el problema. La consulta con print_r de php ha devuelto un array de dos dimensiones o más... pero sus indices están desordenados. El primer elemento es el 1320, el segundo el 109, y así sucesivamente... En otra consulta a otro elemento los índices no tendrían necesariamente estos indices, con lo que no nos vale usar siempre el mismo número como seguro que ya estábais pensando ;-).

Este tipo de arrays se ven mucho en las taxonomias de drupal, donde el indice ha heredado el indice que la taxonomia tiene en su vocabulario correspondiente.

Bueno, el caso es que la solución es muy sencilla usando array_slice, fijaos:

$output = array_slice($nodocrucero->taxonomy, 0, 2);

$tid = $output[0]->tid;

donde tid, o mas bien print_r($tid); nos devolvería lo siguiente:

Array ( [0] => stdClass Object ( [tid] => 1320 [vid] => 14 [name] => que ver [description] => [weight] => 0 [language] => [trid] => 0 ) [1] => stdClass Object ( [tid] => 109 [vid] => 5 [name] => Corfu [description] => [weight] => 0 [language] => [trid] => 0 ) )

Fijaos, es el mismo array, pero ahora vemos claramente como el indice empieza en 0 y lista el resto de elementos sin ningún problema.

En la orden array_slice hemos pasado 0,2 como argumentos porque sabíamos que tenía únicamente dos elementos y queríamos que comenzara a contarlo en 0, pero podríamos usar indices distintos, mayor que 2 por ejemplo si tenemos arrays de mayor tamaño (el que sea, sin problemas).