PHP-Get array value 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 (second arg), ignorant les touches assoc, à la recherche de la position réelle dans le tableau.

y a-t-il une fonction native pour faire cela en PHP ou devrais-je l'écrire? Merci

40
demandé sur thom 2011-06-18 17:19:51

4 réponses

$array = array('foo' => 'bar', 33 => 'bin', 'lorem' => 'ipsum');
$array = array_values($array);
echo $array[0]; //bar
echo $array[1]; //bin
echo $array[2]; //ipsum
84
répondu genesis 2011-06-18 13:23:45

array_values() va faire à 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
13
répondu John Carter 2011-06-18 13:22:17

Oui, pour des valeurs scalaires, une combinaison de implose et array_slice va faire:

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

Ou le mélanger 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
répondu netcoder 2011-06-18 13:48:46

je propose mon idée à ce sujet contre tous les inconvénients array_values( ) fonction, parce que je pense que ce n'est pas une fonction get directe. De cette manière, il faut créer une copie des valeurs tableau indexé numériquement, puis l'accès. Si PHP ne cache pas une méthode qui traduit automatiquement un entier dans la position de l'élément désiré, peut-être une solution légèrement meilleure pourrait consister en une fonction qui exécute le tableau avec un compteur jusqu'à ce qu'il mène à la position désirée, puis retourner le élément atteint.

ainsi, le travail serait optimisé pour un très grand tableau de tailles, puisque l'algorithme serait le plus performant pour les petits indices, s'arrêtant immédiatement. Dans la solution surlignée de array_values( ), cependant, il doit s'agir d'un cycle qui traverse l'ensemble du 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
répondu and.ryx 2016-06-08 12:46:40