Je me demandais si vous pouviez me donner un coup de main avec ceci:
J'ai un tableau multidimensionnel ...
$my_array = array(
0 => array(
"name" => "john",
"id" => 4
),
1 => array(
"name" => "mark",
"id" => 152
),
2 => array(
"name" => "Eduard",
"id" => 152
)
);
Toute idée de ce qui serait le moyen le plus rapide et le plus efficace de vérifier si le tableau $ my_array contient une valeur quelconque avec la clé "id" et sa valeur 152. Je n'ai pas besoin de faire écho ni d'utiliser aucune des valeurs. Je dois juste vérifier (renvoyer vrai) si le tableau contient des enregistrements avec l'ID "clé" et la valeur "152".
Rien ne sera plus rapide qu'une simple boucle. Vous pouvez combiner certaines fonctions de tableau pour le faire, mais elles seront également implémentées en tant que boucle.
function whatever($array, $key, $val) {
foreach ($array as $item)
if (isset($item[$key]) && $item[$key] == $val)
return true;
return false;
}
Voici une version mise à jour de la réponse de Dan Grossman qui tiendra compte des tableaux multidimensionnels (ce que j'étais après):
function find_key_value($array, $key, $val)
{
foreach ($array as $item)
{
if (is_array($item) && find_key_value($item, $key, $val)) return true;
if (isset($item[$key]) && $item[$key] == $val) return true;
}
return false;
}
** PHP> = 5.5
tu peux simplement utiliser ça
$key = array_search(40489, array_column($userdb, 'uid'));
Supposons ce tableau multidimensionnel:
$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'
)
);
$key = array_search(40489, array_column($userdb, 'uid'));
Si vous devez effectuer beaucoup de recherches "id" et que cela devrait être très rapide, vous devriez utiliser un second tableau contenant tous les "ids" comme clés:
$lookup_array=array();
foreach($my_array as $arr){
$lookup_array[$arr['id']]=1;
}
Vous pouvez maintenant rechercher très rapidement un identifiant existant, par exemple:
echo (isset($lookup_array[152]))?'yes':'no';
Comme dans votre question, qui est en réalité un simple tableau à deux dimensions, ne serait-il pas préférable? Regarde-
Supposons que votre nom de tableau 2D $ $ my_array et la valeur à rechercher sont $ id
function idExists($needle='', $haystack=array()){
//now go through each internal array
foreach ($haystack as $item) {
if ($item['id']===$needle) {
return true;
}
}
return false;
}
et pour l'appeler:
idExists($id, $my_array);
Comme vous pouvez le constater, il ne vérifie en fait que si votre index $ interne contient uniquement $ id. Certaines autres réponses ici peuvent également donner la valeur true si nom_clé a également $ value
return 0 < count(
array_filter(
$my_array,
function ($a) {
return array_key_exists('id', $a) && $a['id'] == 152;
}
)
);
Remarque: l'appel array_key_exists
est facultatif. Il se prête simplement à la rusticité.
Une bonne solution peut être celle fournie par @Elias Van Ootegan
dans un commentaire qui est:
$ids = array_column($array, 'id', 'id');
echo isset($ids[40489])?"Exist":"Not Exist";
J'ai essayé et travaillé pour moi, merci mon pote.
Edité
Note: Cela fonctionnera dans PHP 5.5+
Essayez avec ce code ci-dessous. Cela devrait fonctionner correctement pour tout type de recherche multidimensionnelle.
Ici vous pouvez voir EXEMPLE DE DEMO EN DIRECT
function multi_array_search($search_for, $search_in) {
foreach ($search_in as $element) {
if ( ($element === $search_for) ){
return true;
}elseif(is_array($element)){
$result = multi_array_search($search_for, $element);
if($result == true)
return true;
}
}
return false;
}
function checkMultiArrayValue($array) {
global $test;
foreach ($array as $key => $item) {
if(!empty($item) && is_array($item)) {
checkMultiArrayValue($item);
}else {
if($item)
$test[$key] = $item;
}
}
return $test;
}
$multiArray = array(
0 => array(
"country" => "",
"price" => 4,
"discount-price" => 0,
),);
$test = checkMultiArrayValue($multiArray);
echo "<pre>"
print_r($test);
Retourne un tableau qui a un index et une valeur
J'ai écrit la fonction suivante afin de déterminer si un tableau multidimensionnel contient partiellement une certaine valeur.
function findKeyValue ($array, $needle, $value, $found = false){
foreach ($array as $key => $item){
// Navigate through the array completely.
if (is_array($item)){
$found = $this->findKeyValue($item, $needle, $value, $found);
}
// If the item is a node, verify if the value of the node contains
// the given search parameter. E.G.: 'value' <=> 'This contains the value'
if ( ! empty($key) && $key == $needle && strpos($item, $value) !== false){
return true;
}
}
return $found;
}
Appelez la fonction comme ceci:
$this->findKeyValue($array, $key, $value);
La manière la plus simple est la suivante:
$my_array = array(
0 => array(
"name" => "john",
"id" => 4
),
1 => array(
"name" => "mark",
"id" => 152
),
2 => array(
"name" => "Eduard",
"id" => 152
)
);
if (array_search(152, array_column($my_array, 'id')) !== FALSE)
echo 'FOUND!';
else
echo 'NOT FOUND!';
Utilisez un array_map ()
$ options est le tableau dans lequel vous recherchez.
$arr = array_map(function($ar) {
if(array_key_exists('name_of_the_key_you_search_for',$ar)){
return true;
}else{
return false;
}
},$options );
var_dump($arr); //just for test, remove in the code