Ik heb een array waar ik de uid
wil zoeken en de sleutel van de array wil krijgen.
Veronderstel dat we de volgende 2-dimensionale array hebben:
$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'
)
);
De functie-oproep search_by_uid(100)
(uid van de eerste gebruiker) moet 0
teruggeven.
De functie-oproep search_by_uid(40489)
moet 2
teruggeven.
Ik heb geprobeerd lussen te maken, maar ik wil een sneller uitvoerende code.
function searchForId($id, $array) {
foreach ($array as $key => $val) {
if ($val['uid'] === $id) {
return $key;
}
}
return null;
}
Dit zal werken. Je moet het zo noemen:
$id = searchForId('100', $userdb);
Het is belangrijk om te weten dat als je ==
operator gebruikt, de vergeleken types precies hetzelfde moeten zijn, in dit voorbeeld moet je string
zoeken of gewoon ==
gebruiken in plaats van ==
.
Gebaseerd op angoru antwoord. In latere versies van PHP (>= 5.5.0
) kunt u one-liner gebruiken.
$key = array_search('100', array_column($userdb, 'uid'));
Hier is documentatie: http://php.net/manual/en/function.array-column.php.
Voortbouwend op Jakub's uitstekend antwoord, hier is een meer gegeneraliseerde zoekopdracht die zal toestaan dat de sleutel wordt opgegeven (niet alleen voor uid):
function searcharray($value, $key, $array) {
foreach ($array as $k => $val) {
if ($val[$key] == $value) {
return $k;
}
}
return null;
}
Gebruik: $results = searcharray('searchvalue', searchkey, $array);
Ik weet dat dit al beantwoord was, maar ik gebruikte dit en breidde het een beetje meer uit in mijn code zodat je niet alleen op de uid hoefde te zoeken. Ik wil het gewoon delen voor iemand anders die misschien die functionaliteit nodig heeft.
Hier's mijn voorbeeld en houd in gedachten dat dit mijn eerste antwoord is. Ik heb de param array eruit gehaald omdat ik maar in één specifieke array hoefde te zoeken, maar je zou het gemakkelijk kunnen toevoegen. Ik wilde in wezen zoeken op meer dan alleen de uid.
Ook kunnen er in mijn situatie meerdere sleutels zijn om terug te geven als resultaat van zoeken op andere velden die misschien niet uniek zijn.
/**
* @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;
}
Later heb ik dit zo geschreven dat ik kan zoeken op een andere waarde en associatieve sleutel. Dus mijn eerste voorbeeld laat je zoeken naar een waarde in een specifieke associatieve sleutel, en geeft alle overeenkomsten terug.
Dit tweede voorbeeld laat zien waar een waarde ('Taylor') wordt gevonden in een bepaalde associatieve sleutel (voornaam) EN een andere waarde (true) wordt gevonden in een andere associatieve sleutel (employed), en geeft alle overeenkomsten terug (sleutels waar mensen met voornaam 'Taylor' EN werkzaam zijn).
/**
* @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;
}
Gebruik van de functie
$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);
Resultaat
Array ( [0] => 2 )