J'utilise in_array()
pour vérifier si une valeur existe dans un tableau comme ci-dessous,
$a = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $a))
{
echo "Got Irix";
}
//print_r($a);
mais qu'en est-il d'un tableau multidimensionnel (ci-dessous) - comment puis-je vérifier cette valeur si elle existe dans le multi-tableau?
$b = array(array("Mac", "NT"), array("Irix", "Linux"));
print_r($b);
ou je ne devrais pas utiliser in_array()
quand vient le tableau multidimensionnel?
php
arrays
multidimensional-array
laukok
la source
la source
var_dump(array_sum(array_map(function ($tmp) {return in_array('NT',$tmp);}, $multiarray)) > 0);
$multiarray = array( "Hello", array("Mac", "NT"), array("Irix", "Linux"));
$tmp
est un tableau avecis_array()
fonction. Si ce n'est pas un tableau, procédez avec un scénario différent.Réponses:
in_array()
ne fonctionne pas sur les tableaux multidimensionnels. Vous pouvez écrire une fonction récursive pour le faire pour vous:Usage:
la source
_r
, analogue àprint_r()
, par exemple). Il descend dans tous les tableaux imbriqués pour rechercher la valeur jusqu'à ce qu'il n'y ait plus de tableaux à trouver. De cette façon, vous pouvez rechercher dans des tableaux de complexité arbitraire au lieu de seulement deux niveaux de profondeur.Si vous connaissez la colonne à rechercher, vous pouvez utiliser array_search () et array_column ():
Cette idée est dans la section commentaires de array_search () dans le manuel PHP;
la source
array_column
Cela fonctionnera aussi.
Usage:
la source
foreach
boucle.$array
qui a une clé associative qui correspond$item
. Sans parler de la possibilité de faire correspondre involontairement une partie d'une chaîne lorsqu'il y a une citation double dans la chaîne elle-même. Je ne ferais confiance à cette fonction que dans des situations petites / simples comme cette question.$item
contient des caractères qui bousillent le premier paramètre (expression régulière) depreg_match
Cela le fera:
in_array
fonctionne uniquement sur un tableau unidimensionnel, vous devez donc boucler sur chaque sous-tableau et exécuterin_array
sur chacun.Comme d'autres l'ont noté, cela ne sera valable que pour un tableau à 2 dimensions. Si vous avez plus de tableaux imbriqués, une version récursive serait préférable. Voir les autres réponses pour des exemples de cela.
la source
)
manquant à la fin de la ligne mentionnée.in_array()
avec le troisième paramètre défini surtrue
. Découvrez ici pourquoi: stackoverflow.com/questions/37080581/…si votre tableau comme celui-ci
Utilisez ceci
exemple :
echo in_multiarray("22", $array,"Age");
la source
la source
array_column()
Grande fonction, mais cela n'a pas fonctionné pour moi jusqu'à ce que j'ajoute
if($found) { break; }
leelseif
la source
Pour les enfants multidimensionnels:
in_array('needle', array_column($arr, 'key'))
Pour les enfants unidimensionnels:
in_array('needle', call_user_func_array('array_merge', $arr))
la source
array_column()
méthode, lacall_user_func_array('array_merge')
méthode fonctionne également avec les tableaux enfant basés sur l'index, +1Vous pouvez toujours sérialiser votre tableau multidimensionnel et faire
strpos
:Divers documents pour les choses que j'ai utilisées:
la source
Depuis PHP 5.6, il existe une solution meilleure et plus propre pour la réponse originale:
Avec un tableau multidimensionnel comme celui-ci:
Nous pouvons utiliser l' opérateur splat :
Si vous avez des clés de chaîne comme celle-ci:
Vous devrez utiliser
array_values
pour éviter l'erreurCannot unpack array with string keys
:la source
La solution acceptée (au moment de la rédaction) par jwueller
Est parfaitement correct mais peut avoir un comportement inattendu lors d'une comparaison faible (le paramètre
$strict = false
).En raison du type de jonglage de PHP lors de la comparaison de valeurs de type différent à la fois
et
Évalue
true
car"example"
est castéint
et transformé en0
.(Voir Pourquoi PHP considère-t-il que 0 est égal à une chaîne? )
Si ce n'est pas le comportement souhaité, il peut être pratique de convertir des valeurs numériques en chaîne avant d'effectuer une comparaison non stricte:
la source
C'est la première fonction de ce type que j'ai trouvée dans le manuel php pour in_array . Les fonctions dans les sections de commentaires ne sont pas toujours les meilleures, mais si cela ne fait pas l'affaire, vous pouvez également y regarder :)
la source
Voici ma proposition basée sur la solution json_encode () avec:
Si le mot est introuvable, il renvoie toujours 0 égal à faux .
J'espère que ça aide.
la source
00
into10000
oulo
intoHello
. De plus, cela échouera si l'aiguille contient un caractère quijson_encode
s'échappe , comme des guillemets doubles.Je pense que vous pouvez simplement utiliser array_key_exists de nos jours:
la source
Je cherchais une fonction qui me permettrait de rechercher à la fois des chaînes et des tableaux (comme aiguille) dans le tableau (botte de foin), j'ai donc ajouté à la réponse de @jwueller .
Voici mon code:
la source
Cela fonctionne aussi en créant d'abord un nouveau tableau unidimensionnel à partir de l'original.
la source
Version plus courte, pour les tableaux multidimensionnels créés à partir d'ensembles de résultats de base de données.
Renvoie si le tableau $ os_list contient 'XP' dans le champ os_version.
la source
J'ai trouvé une toute petite solution simple:
Si votre tableau est:
alors le code sera comme:
la source
J'ai utilisé cette méthode fonctionne pour n'importe quel nombre de nids et ne nécessite pas de piratage
la source
S'il vous plaît essayez:
Je ne suis pas sûr du besoin, mais cela pourrait fonctionner pour votre besoin
la source
$b
Les clés de tableau ne sont que des entiers ... il n'y a pas de clés spécifiées dans ces tableaux ... etarray_keys($b["irix"])
vont simplement générer une erreur, car elles$b["irix"]
n'existent pas.qu'en est-il de array_search? semble assez rapide que foreach selon https://gist.github.com/Ocramius/1290076 ..
la source
vous pouvez utiliser comme ça
http://php.net/manual/tr/function.array-intersect.php
la source