parametreleri aracılığıyla erişim php dizi çocuklar?

4 Cevap php

Ben şöyle bir dizi var benzersiz bir durum var:

$a = array('a' => array('b' => array('c' => 'woohoo!')));

Ben böyle bir şekilde dizinin değerlerine erişmek istiyorsanız:

  • Pozisyon için dizi dönecekti some_function($a, array('a')) ki a
  • some_function($a, array('a', 'b', 'c')) hangi kelime 'woohoo' dönecekti

Yani temelde, bunu kullanarak dizkimlike matkaplar aşağı sonucunda ikinci param ve bu anahtarın varlığını denetler değişkenler geçti. Yardımcı olabilecek bazı yerli php fonksiyonları üzerinde herhangi bir fikir bunu? Ben özyineleme faydalanmak gerekir varsayarak yaşıyorum. Herhangi bir düşünce gerçekten takdir.

Teşekkürler.

4 Cevap

Bu denenmemiş ama bu durumda işlemek için özyineleme gerekmez:

function getValueByKey($array, $key) {
    foreach ($key as $val) {
        if (!empty($array[$val])) {
            $array = $array[$val];
        } else return false;
    }
    return $array;
}

Sen RecursiveArrayIterator ile deneyebilirsiniz

İşte bir example on how to use it olduğunu.

Burada bir özyinelemeli uygulama bulunuyor:

function some_function($array, $path) {
    if (!count($path)) {
        return;
    }
    $key = array_shift($path);
    if (!array_key_exists($key, $array)) {
        return;
    }
    if (count($path) > 1) {
        return some_function($array[$key], $path);
    } else {
        return $array[$key];
    }
}

Ve iteratif bir uygulama:

function some_function($array, $path) {
    if (!count($path)) {
        return;
    }
    $tmp = &$array;
    foreach ($path as $key) {
        if (!array_key_exists($key, $tmp)) {
            return;
        }
        $tmp = &$tmp[$key];
    }
    return $tmp;
}

Yolu geçerli değil ise bu işlevler null dönecektir.

$a['a'] returns the array at position a.
$a['a']['b']['c'] returns woohoo.

Bu olmayacak?