J'ai un tableau associatif et j'ai besoin de trouver la position numérique d'une clé. Je pourrais parcourir le tableau manuellement pour le trouver, mais y a-t-il un meilleur moyen d'intégrer PHP?
$a = array(
'blue' => 'nice',
'car' => 'fast',
'number' => 'none'
);
// echo (find numeric index of $a['car']); // output: 1
array("val1", "val2", "car" => "val3")
il produira0
, ce qui est faux ...http://php.net/manual/en/function.array-keys.php
la source
la source
la source
Bien que la réponse de Fosco ne soit pas fausse, il y a un cas à considérer avec celui-ci: les tableaux mixtes. Imaginez que j'ai un tableau comme celui-ci:
Maintenant, PHP permet ce genre de syntaxe mais il a un problème: si j'exécute le code de Fosco, j'obtiens
0
ce qui est faux pour moi, mais pourquoi cela se produit?Parce que lorsque vous faites des comparaisons entre des chaînes et des entiers, PHP convertit les chaînes en entiers (et c'est un peu stupide à mon avis), donc lorsque vous
array_search()
recherchez l'index, il s'arrête au premier parce qu'apparemment,("car" == 0)
c'est vrai .Le réglage
array_search()
en mode strict ne résoudra pas le problème cararray_search("0", array_keys($a))
cela renverrait false même si un élément d'index 0 existe.Donc, ma solution convertit simplement tous les index de
array_keys()
en chaînes, puis les compare correctement:Imprime
1
, ce qui est correct.EDIT:
Comme Shaun l'a souligné dans le commentaire ci-dessous, la même chose s'applique à la valeur d'index, si vous recherchez un index int comme celui-ci:
Vous obtiendrez toujours
0
, ce qui est faux, donc la solution serait de convertir l'index (si vous utilisez une variable) en une chaîne comme celle-ci:la source
var_dump(array_search(0, array_map("strval", array_keys($a))));
produira toujoursint (0)
, plutôt quebool (false)
.une solution que j'ai trouvée ... probablement assez inefficace en comparaison avec la solution de Fosco:
la source
array_search
, qui effectue un tri en premier et donc douloureusement lent.Toutes les solutions basées sur array_keys ne fonctionnent pas pour les tableaux mixtes. La solution est simple:
Depuis php.net: Si le troisième paramètre strict est défini sur TRUE, la fonction array_search () recherchera des éléments identiques dans la botte de foin. Cela signifie qu'il effectuera également une comparaison de type stricte de l'aiguille dans la botte de foin, et les objets doivent être la même instance.
la source