50 votes

PHP - Obtenir la valeur d'un 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 renverrait 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 faire cela en PHP ou dois-je l'écrire ? Merci

102voto

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

19voto

therefromhere Points 21329

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

7voto

and.ryx Points 748

Je propose mon idée à ce sujet contre tous les inconvénients array_values( ) parce que je pense que ce n'est pas une fonction d'obtention directe. De cette façon, il faut créer une copie des valeurs du tableau indexé numériquement et ensuite y accéder. Si PHP ne cache pas une méthode qui traduit automatiquement un entier dans la position de l'élément désiré, peut-être qu'une solution un peu meilleure pourrait consister en une fonction qui parcourt le tableau avec un compteur jusqu'à ce qu'il arrive à la position désirée, puis retourne l'élément atteint.

Ainsi, le travail serait optimisé pour les tableaux de très grandes tailles, puisque l'algorithme serait les indices les plus performants pour les petits, s'arrêtant immédiatement. Dans la solution mise en évidence de array_values( ) Cependant, il s'agit d'un cycle qui traverse tout le tableau, même si, par exemple, je dois accéder au tableau $ [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;
}

4voto

netcoder Points 31874

Oui, pour les valeurs scalaires, une combinaison de imploser y array_slice fera l'affaire :

$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 y list (merci @nikic) pour qu'il fonctionne avec tous les types de valeurs :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X