Je sais que la réponse a déjà été donnée, mais j'ai utilisé cette méthode et je l'ai étendue un peu plus dans mon code pour que vous n'ayez pas à faire une recherche uniquement par l'uid. Je veux juste le partager pour tous ceux qui pourraient avoir 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 param parce que je n'avais besoin de rechercher qu'un tableau spécifique, mais vous pourriez facilement l'ajouter. Je voulais essentiellement faire une recherche sur plus que l'uid.
De plus, dans mon cas, il peut y avoir plusieurs clés à renvoyer à la suite d'une recherche sur 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 une clé associative spécifique et de renvoyer toutes les correspondances.
Ce deuxième exemple montre où se trouve une valeur ("Taylor") dans une certaine clé associative (first_name). ET une autre valeur (true) est trouvée dans une autre clé associative (employed), et renvoie toutes les correspondances (clés dans lesquelles les personnes dont le prénom est '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 )
0 votes
Il est intéressant de noter que les bibliothèques underscore (et lowdash) ajoutent cette fonction à javascript...
12 votes
J'ai écrit un script pour tester la performance de quelques réponses. Il génère un tableau de tableaux de 500k membres et le parcourt à la recherche d'une valeur dans le dernier membre. J'ai comparé une fonction comme la réponse acceptée, aux deux fonctions suivantes
array_column
des réponses en une ligne. Je les ai toutes modifiées pour qu'elles renvoient le tableau découvert, et pas seulement la clé, car c'est généralement ce que j'utilise. La méthode function a obtenu un score de 0,361, search-col 0,184 et keys-col 0,189 micro délai moyen sur 1000 exécutions pour chaque méthode.