SORU
19 HAZİRAN 2009, Cuma


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
19 HAZİRAN 2009, Cuma


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Mark Hyder

    Mark Hyder

    6 EKİM 2011
  • Official Clouds

    Official Clo

    1 HAZİRAN 2011
  • PlugResearch

    PlugResearch

    22 Mart 2006