J'ai un tableau dans lequel je veux rechercher le uid
et obtenir la clé du tableau.
Supposons que nous ayons le tableau à 2 dimensions suivant :
$userdb = array(
array(
'uid' => '100',
'name' => 'Sandra Shush',
'pic_square' => 'urlof100'
),
array(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
array(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
L'appel de fonction search_by_uid(100)
(uid du premier utilisateur) devrait retourner 0
.
L'appel de fonction search_by_uid(40489)
devrait retourner 2
.
J'ai essayé de faire des boucles, mais je veux un code qui s'exécute plus rapidement.
function searchForId($id, $array) {
foreach ($array as $key => $val) {
if ($val['uid'] === $id) {
return $key;
}
}
return null;
}
Ça va marcher. Vous devriez l'appeler comme ça :
$id = searchForId('100', $userdb);
Il est important de savoir que si vous utilisez l'opérateur ===
, les types comparés doivent être exactement les mêmes, dans cet exemple vous devez chercher string
ou simplement utiliser ==
au lieu de ===
.
Basé sur la réponse de angoru. Dans les versions ultérieures de PHP (>= 5.5.0
), vous pouvez utiliser le one-liner.
$key = array_search('100', array_column($userdb, 'uid'));
Voici la documentation : http://php.net/manual/en/function.array-column.php.
En s'appuyant sur l'excellente réponse de Jakub, voici une recherche plus généralisée qui permet de spécifier la clé (et pas seulement l'uid) :
function searcharray($value, $key, $array) {
foreach ($array as $k => $val) {
if ($val[$key] == $value) {
return $k;
}
}
return null;
}
Utilisation : $results = searcharray('searchvalue' ;, searchkey, $array);
Je sais qu'il a déjà été répondu à cette question, mais j'ai utilisé cette fonction et l'ai étendue un peu plus dans mon code afin de ne pas avoir à rechercher uniquement par l'identifiant. Je veux juste le partager pour tous ceux qui auraient besoin de cette fonctionnalité.
Voici mon exemple et n'oubliez pas qu'il s'agit de ma première réponse. J'ai supprimé le tableau de paramètres parce que je n'avais besoin de rechercher que dans un tableau spécifique, mais vous pourriez facilement l'ajouter. Je voulais essentiellement effectuer une recherche sur d'autres critères que l'UID.
De plus, dans ma situation, il peut y avoir plusieurs clés à retourner suite à une recherche par d'autres champs qui peuvent ne pas être uniques.
/**
* @param array multidimensional
* @param string value to search for, ie a specific field name like name_first
* @param string associative key to find it in, ie field_name
*
* @return array keys.
*/
function search_revisions($dataArray, $search_value, $key_to_search) {
// This function will search the revisions for a certain value
// related to the associative key you are looking for.
$keys = array();
foreach ($dataArray as $key => $cur_value) {
if ($cur_value[$key_to_search] == $search_value) {
$keys[] = $key;
}
}
return $keys;
}
Plus tard, j'ai fini par écrire ceci pour me permettre de rechercher une autre valeur et une clé associative. Mon premier exemple vous permet donc de rechercher une valeur dans n'importe quelle clé associative spécifique et de renvoyer toutes les correspondances.
Ce deuxième exemple vous montre où une valeur ('Taylor' ;) se trouve dans une certaine clé associative (prénom) ET une autre valeur (true) se trouve dans une autre clé associative (employed), et renvoie toutes les correspondances (Clés où les personnes avec le prénom 'Taylor' ; ET sont employées).
/**
* @param array multidimensional
* @param string $search_value The value to search for, ie a specific 'Taylor'
* @param string $key_to_search The associative key to find it in, ie first_name
* @param string $other_matching_key The associative key to find in the matches for employed
* @param string $other_matching_value The value to find in that matching associative key, ie true
*
* @return array keys, ie all the people with the first name 'Taylor' that are employed.
*/
function search_revisions($dataArray, $search_value, $key_to_search, $other_matching_value = null, $other_matching_key = null) {
// This function will search the revisions for a certain value
// related to the associative key you are looking for.
$keys = array();
foreach ($dataArray as $key => $cur_value) {
if ($cur_value[$key_to_search] == $search_value) {
if (isset($other_matching_key) && isset($other_matching_value)) {
if ($cur_value[$other_matching_key] == $other_matching_value) {
$keys[] = $key;
}
} else {
// I must keep in mind that some searches may have multiple
// matches and others would not, so leave it open with no continues.
$keys[] = $key;
}
}
}
return $keys;
}
Utilisation de la fonction
$data = array(
array(
'cust_group' => 6,
'price' => 13.21,
'price_qty' => 5
),
array(
'cust_group' => 8,
'price' => 15.25,
'price_qty' => 4
),
array(
'cust_group' => 8,
'price' => 12.75,
'price_qty' => 10
)
);
$findKey = search_revisions($data,'8', 'cust_group', '10', 'price_qty');
print_r($findKey);
Résultat
Array ( [0] => 2 )