Nasıl PHP çok boyutlu bir dizi anahtar=>değeri aramak için
Herhangi bir hızlı yolu anahtar değer çifti çok boyutlu bir dizi içinde bulunduğu tüm subarrays almak için var mı? Dizinin nasıl olacağını söyleyemem.
Basit bir örnek dizi:
$arr = array(0 => array(id=>1,name=>"cat 1"),
1 => array(id=>2,name=>"cat 2"),
2 => array(id=>3,name=>"cat 1")
);
Ben anahtarı için=Ad=Ara"kedi 1" işlevi döndürür:
array(0 => array(id=>1,name=>"cat 1"),
1 => array(id=>3,name=>"cat 1")
);
İşlevi en derin seviyeye inmek özyinelemeli olmalı sanırım.
CEVAP
Kod:
function search($array, $key, $value)
{
$results = array();
if (is_array($array)) {
if (isset($array[$key]) && $array[$key] == $value) {
$results[] = $array;
}
foreach ($array as $subarray) {
$results = array_merge($results, search($subarray, $key, $value));
}
}
return $results;
}
$arr = array(0 => array(id=>1,name=>"cat 1"),
1 => array(id=>2,name=>"cat 2"),
2 => array(id=>3,name=>"cat 1"));
print_r(search($arr, 'name', 'cat 1'));
Çıkış:
Array
(
[0] => Array
(
[id] => 1
[name] => cat 1
)
[1] => Array
(
[id] => 3
[name] => cat 1
)
)
Eğer verimlilik önemliyse, özyinelemeli çağrıları birleştirme diziler birlikte, şöyle yerine: $results
aynı geçici dizideki sonuçları mağazası yazabilirsiniz
function search($array, $key, $value)
{
$results = array();
search_r($array, $key, $value, $results);
return $results;
}
function search_r($array, $key, $value, &$results)
{
if (!is_array($array)) {
return;
}
if (isset($array[$key]) && $array[$key] == $value) {
$results[] = $array;
}
foreach ($array as $subarray) {
search_r($subarray, $key, $value, $results);
}
}
Anahtar var search_r
değer başvuruyla yerine dördüncü parametre alır; 12* *işareti çok önemlidir.
Eğer PHP eski bir sürümü Varsa, pass-by-referans bölümü belirtmeniz gerekir . BİLGİNİZE: ^em>AraBildirgesi search_r
yerine. Diğer bir deyişle, son çizgi search_r($subarray, $key, $value, &$results)
olur.
Nasıl PHP belirli bir anahtar değeri i...
Nasıl Ruby başka bir dizi için bir diz...
Nasıl python iki boyutlu bir dizi tanı...
Nasıl bir dizi içinde geçen anahtar al...
Nasıl bir değeri, bir java hashmap bir...