Je dois vérifier si une valeur existe dans un tableau multidimensionnel. J'ai trouvé cet exemple sur Stackoverflow et sur PHP.NET que j'aime bien car c'est une solution élégante et compacte, mais j'ai remarqué un comportement étrange:
$userdb=Array
(
(0) => Array
(
(uid) => '100',
(name) => 'Sandra Shush',
(pic_square) => 'urlof100'
),
(1) => Array
(
(uid) => '5465',
(name) => 'Stefanie Mcmohn',
(pic_square) => 'urlof100'
),
(2) => Array
(
(uid) => '40489',
(name) => 'Michael',
(pic_square) => 'urlof40489'
)
);
if(array_search(100, array_column($userdb, 'uid'))) {
echo "FOUND";
}
L'instruction IF ne renvoie aucune valeur si vous vérifiez l'existence d'une valeur du tableau FIRST (Array [0]
). Cela fonctionne avec les valeurs des autres tableaux. Essayez d'abord avec 100
, puis essayez avec 40489
(ou essayez avec un "nom" ou un "pic_square").
Vous pouvez utiliser in_array()
comme ci-dessous: -
<?php
$userdb=Array
(
'0' => Array
(
'uid' => '100',
'name' => 'Sandra Shush',
'url' => 'urlof100'
),
'1' => Array
(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
'2' => Array
(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
print_r(array_column($userdb, 'uid'));
if(in_array(100, array_column($userdb, 'uid'))) { // search value in the array
echo "FOUND";
}
?>
Résultat: - https://eval.in/1058147
Remarque: - votre code fonctionnera également si vous modifiez votre comparaison comme ci-dessous: -
if(array_search(100, array_column($userdb, 'uid')) !== False) {
echo "FOUND";
} else {
echo "Not Found";
}
à travers le manuel: - http://php.net/manual/en/function.array-search.php
Il déclare: -
Retourne la clé d'aiguille si elle est trouvée dans le tableau, FALSE sinon.
php
traité 0
comme false
et 1
comme true
lorsqu'il s'agit de la valeur renvoyée par une fonction C'est pourquoi votre code échoue car votre code renvoie 0
.
En effet, array_search
renvoie la clé, qui dans ce cas est 0
, ce qui équivaut à false. Vous devez faire une comparaison stricte, à savoir:
if (false !== array_search(100, array_column($userdb, 'uid'))) {
...
}
C'est parce que votre valeur 100
est dans le premier index 0
, donc si la condition échoue. Au lieu de cela, comparez strictement avec false
:
if(array_search(100, array_column($userdb, 'uid')) !== False) {
echo "FOUND";
} else {
echo "Not Found";
}
Pour cette instance, il est préférable d'utiliser in_array
, car vous vérifiez simplement si l'élément est dans un tableau ou non. Utilisez, array_search
si vous voulez récupérer l'index de l'élément.
Vous pouvez essayer ceci:
$res1 =Array
(
'0' => Array
(
'uid' => '100',
'name' => 'Sandra Shush',
'url' => 'urlof100'
),
'1' => Array
(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
)
);
$res2 =Array
(
'0' => Array
(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
'1' => Array
(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
)
);
foreach ($res1 as $key=>$item1)
{
$val=$item1['uid'];
foreach ($res2 as $key2=>$item2)
{
if ($item2['uid'] == $val)
{
//value 5465 found
}
}
}