
Rachit
Ich habe ein Array, in dem ich suchen möchte uid
und erhalten Sie den Schlüssel des Arrays.
Beispiele
Angenommen, wir haben das folgende zweidimensionale Array:
$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'
)
);
Der Funktionsaufruf search_by_uid(100)
(uid des ersten Benutzers) sollte zurückkehren 0
.
Der Funktionsaufruf search_by_uid(40489)
sollte zurückkehren 2
.
Ich habe versucht, Schleifen zu erstellen, aber ich möchte einen schneller ausgeführten Code.

Jakub Truneček
function searchForId($id, $array) {
foreach ($array as $key => $val) {
if ($val['uid'] === $id) {
return $key;
}
}
return null;
}
Das wird funktionieren. Du solltest es so nennen:
$id = searchForId('100', $userdb);
Es ist wichtig zu wissen, dass, wenn Sie verwenden ===
Operator verglichene Typen müssen genau gleich sein, in diesem Beispiel müssen Sie suchen string
oder einfach verwenden ==
stattdessen ===
.
Beyogen auf angoru Antworten. In späteren Versionen von PHP (>= 5.5.0
) können Sie Einzeiler verwenden.
$key = array_search('100', array_column($userdb, 'uid'));
Hier ist Dokumentation: http://php.net/manual/en/function.array-column.php.

angoru
Wenn Sie (PHP 5 >= 5.5.0) verwenden, müssen Sie dafür keine eigene Funktion schreiben, schreiben Sie einfach diese Zeile und fertig.
Wenn Sie nur ein Ergebnis wünschen:
$key = array_search(40489, array_column($userdb, 'uid'));
Für mehrere Ergebnisse
$keys = array_keys(array_column($userdb, 'uid'), 40489);
Falls Sie ein assoziatives Array haben, wie in den Kommentaren angegeben, können Sie es machen mit:
$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);
Wenn Sie PHP < 5.5.0 verwenden, können Sie verwenden dieser Backportdanke ramsey!
Update: Ich habe einige einfache Benchmarks erstellt und das Formular für mehrere Ergebnisse scheint das schnellste zu sein, sogar schneller als die benutzerdefinierte Jakub-Funktion!

Iryna Batwina
In späteren Versionen von PHP (>= 5.5.0) können Sie diesen Einzeiler verwenden:
$key = array_search('100', array_column($userdb, 'uid'));

reflexiv
Aufbauend auf Jakubs ausgezeichneter Antwort ist hier eine allgemeinere Suche, mit der der Schlüssel angegeben werden kann (nicht nur für uid):
function searcharray($value, $key, $array) {
foreach ($array as $k => $val) {
if ($val[$key] == $value) {
return $k;
}
}
return null;
}
Verwendungszweck: $results = searcharray('searchvalue', searchkey, $array);

BEJGAM SHIVA PRASAD
Sieht aus array_filter wird eine geeignete Lösung dafür sein …
$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'
)
);
PHP-Code
<?php
$search = 5465;
$found = array_filter($userdb,function($v,$k) use ($search){
return $v['uid'] == $search;
},ARRAY_FILTER_USE_BOTH); // With latest PHP third parameter is optional.. Available Values:- ARRAY_FILTER_USE_BOTH OR ARRAY_FILTER_USE_KEY
$values= print_r(array_values($found));
$keys = print_r(array_keys($found));

Nadeem0035
Ich weiß, dass dies bereits beantwortet wurde, aber ich habe dies verwendet und in meinem Code etwas mehr erweitert, sodass Sie nicht nur nach der uid suchen mussten. Ich möchte es nur für alle anderen freigeben, die diese Funktionalität benötigen.
Hier ist mein Beispiel und bitte bedenken Sie, dass dies meine erste Antwort ist. Ich habe das param-Array herausgenommen, weil ich nur ein bestimmtes Array durchsuchen musste, aber Sie es einfach hinzufügen konnten. Ich wollte im Wesentlichen nach mehr als nur der uid suchen.
In meiner Situation können auch mehrere Schlüssel zurückgegeben werden, wenn nach anderen Feldern gesucht wird, die möglicherweise nicht eindeutig sind.
/**
* @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;
}
Später schrieb ich dies, damit ich nach einem anderen Wert und assoziativen Schlüssel suchen konnte. In meinem ersten Beispiel können Sie also nach einem Wert in einem bestimmten assoziativen Schlüssel suchen und alle Übereinstimmungen zurückgeben.
Dieses zweite Beispiel zeigt Ihnen, wo ein Wert (‘Taylor’) in einem bestimmten assoziativen Schlüssel (first_name) zu finden ist. UND ein anderer Wert (wahr) wird in einem anderen assoziativen Schlüssel (beschäftigt) gefunden und gibt alle Übereinstimmungen zurück (Schlüssel, bei denen Personen mit dem Vornamen „Taylor“ UND beschäftigt sind).
/**
* @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;
}
Verwendung der Funktion
$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);
Ergebnis
Array ( [0] => 2 )
Sie können dies mit einer Kombination aus zwei Funktionen tun, array_search
& array_column
.
$search_value="5465";
$search_key = 'uid';
$user = array_search($search_value, array_column($userdb, $search_key));
print_r($userdb[$user]);
5465 ist die Benutzer-ID, die Sie suchen möchten, Flüssigkeit ist der Schlüssel, der die Benutzer-ID und enthält $userdb ist das Array, das in der Frage definiert ist.
Verweise:
array_search auf php.net
array_column auf php.net
9932000cookie-checkPHP mehrdimensionale Array-Suche nach Wertyes
Interessanterweise fügen die Unterstrich- (und Lowdash-) Bibliotheken diese Funktion zu Javascript hinzu …
– ErichBSchulz
7. März 2014 um 12:37 Uhr
Ich habe ein Skript geschrieben, um die Leistung einiger Antworten zu testen. Es generiert ein Array von Arrays mit 500.000 Mitgliedern und durchsucht es nach einem Wert im letzten Mitglied. Ich habe eine Funktion wie die akzeptierte Antwort mit den beiden verglichen
array_column
einzeilige Antworten. Ich habe sie alle geändert, um das tatsächlich entdeckte Array zurückzugeben, nicht nur den Schlüssel, da dies normalerweise mein Anwendungsfall ist. Die Funktionsmethode erzielte 0,361, Suchspalte 0,184 und Schlüsselspalte 0,189 durchschnittliche Mikroverzögerung über 1000 Läufe für jede Methode.– Josch
14. Februar 2016 um 12:49 Uhr