Man ir masīvs, kurā es gribu meklēt uid
un iegūt masīva atslēgu.
Pieņemsim, ka mums ir šāds divdimensiju masīvs:
$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'
)
);
Funkcijas izsaukumam search_by_uid(100)
(pirmā lietotāja uid) jāatgriež 0
.
Funkcijas izsaukumam search_by_uid(40489)
jāatgriež 2
.
Es mēģināju izveidot cilpas, bet es gribu ātrāk izpildāmu kodu.
function searchForId($id, $array) {
foreach ($array as $key => $val) {
if ($val['uid'] === $id) {
return $key;
}
}
return null;
}
Tas darbosies. Jums vajadzētu to saukt šādi:
$id = searchForId('100', $userdb);
Svarīgi zināt, ka, ja izmantojat ===
operatoru, salīdzinātajiem tipiem jābūt pilnīgi vienādiem, šajā piemērā jums jāmeklē stringa
vai vienkārši jāizmanto ==
, nevis ===
.
Pamatojoties uz angoru atbildi. Vēlākajās PHP versijās (>= 5.5.0
) var izmantot vienrindi.
$key = array_search('100', array_column($userdb, 'uid'));
Šeit ir dokumentācija: http://php.net/manual/en/function.array-column.php.
Pamatojoties uz Jakub's lieliska atbilde, šeit ir vispārīgāka meklēšana, kas ļaus norādīt atslēgu (ne tikai uid):
function searcharray($value, $key, $array) {
foreach ($array as $k => $val) {
if ($val[$key] == $value) {
return $k;
}
}
return null;
}
Lietošana: $results = searcharray('searchvalue', searchkey, $array);
Es zinu, ka uz šo jautājumu jau tika atbildēts, bet es to izmantoju un paplašināju to nedaudz vairāk savā kodā, lai jums nebūtu jāmeklē tikai pēc uid. Es tikai vēlos dalīties ar to, lai ikviens cits, kam varētu būt nepieciešama šī funkcionalitāte.
Lūk, mans piemērs, un, lūdzu, ņemiet vērā, ka tā ir mana pirmā atbilde. Es izņēmu param masīvu, jo man vajadzēja meklēt tikai vienā konkrētā masīvā, bet jūs to varētu viegli pievienot. Es gribēju būtībā meklēt ne tikai pēc uid.
Turklāt manā situācijā var būt vairāki atslēgas taustiņi, ko jāatgriež, meklējot pēc citiem laukiem, kas var nebūt unikāli.
/**
* @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;
}
Vēlāk es galu galā uzrakstīju šo, lai es varētu meklēt citu vērtību un asociatīvo atslēgu. Tātad mans pirmais piemērs ļauj meklēt vērtību jebkurā konkrētā asociatīvajā atslēgā un atgriezt visus atbilstības rezultātus.
Šis otrais piemērs parāda, kur vērtība ('Taylor') ir atrasta noteiktā asociatīvajā atslēgā (vārds_vārds) Un cita vērtība (true) ir atrasta citā asociatīvajā atslēgā (nodarbināts), un atgriež visus sakritības (atslēgas, kur cilvēki ar vārdu 'Taylor' UN ir nodarbināti).
/**
* @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;
}
Funkcijas izmantošana
$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);
Rezultāts
Array ( [0] => 2 )