web-dev-qa-db-fra.com

PHP - Récupère la valeur du tableau avec un index numérique

J'ai un tableau comme:

$array = array('foo' => 'bar', 33 => 'bin', 'lorem' => 'ipsum');
echo native_function($array, 0); // bar
echo native_function($array, 1); // bin
echo native_function($array, 2); // ipsum

Ainsi, cette fonction native retournerait une valeur basée sur un index numérique (deuxième argument), ignorant les clés d'assoc, recherchant la position réelle dans le tableau.

Existe-t-il une fonction native pour le faire dans PHP ou dois-je l'écrire? Merci

45
thom
$array = array('foo' => 'bar', 33 => 'bin', 'lorem' => 'ipsum');
$array = array_values($array);
echo $array[0]; //bar
echo $array[1]; //bin
echo $array[2]; //ipsum
92
genesis

array_values() fera à peu près ce que vous voulez:

$numeric_indexed_array = array_values($your_array);
// $numeric_indexed_array = array('bar', 'bin', 'ipsum');
print($numeric_indexed_array[0]); // bar
18
John Carter

Je propose mon idée à ce sujet contre tout inconvénient array_values( ) fonction, car je pense que ce n'est pas une fonction get directe. De cette façon, il doit créer une copie du tableau indexé numériquement, puis y accéder. Si PHP ne masque pas une méthode qui traduit automatiquement un entier à la position de l'élément souhaité, une solution légèrement meilleure pourrait peut-être consister en une fonction qui exécute le tableau avec un compteur jusqu'à ce qu'elle conduise à la position souhaitée, puis renvoyez l'élément atteint.

Ainsi, le travail serait optimisé pour un très large éventail de tailles, car l'algorithme serait le plus performant pour les petits indices, s'arrêtant immédiatement. Dans la solution mise en évidence de array_values( ), cependant, cela a à voir avec un cycle traversant tout le tableau, même si, par exemple, je dois accéder à $ array [1].

function array_get_by_index($index, $array) {

    $i=0;
    foreach ($array as $value) {
        if($i==$index) {
            return $value;
        }
        $i++;
    }
    // may be $index exceedes size of $array. In this case NULL is returned.
    return NULL;
}
4
and.ryx

Oui, pour les valeurs scalaires, une combinaison de implode et array_slice fera:

$bar = implode(array_slice($array, 0, 1));
$bin = implode(array_slice($array, 1, 1));
$ipsum = implode(array_slice($array, 2, 1));

Ou mélangez-le avec array_values et list (merci @nikic) pour qu'il fonctionne avec tous les types de valeurs:

list($bar) = array_values(array_slice($array, 0, 1));
4
netcoder