PHP karmaşık bir ilişkisel dizi yineleme

7 Cevap php

PHP, bu yapının bir ilişkisel dizi üzerinde yineleme için kolay bir yol var mı:

Dizi $searches-4 ile 5 arasında birleştirici parçaları ile bir numaralı indisine sahiptir. Yani $searches[0] $searches[n] ile üzerinde yinelemek gerekiyor, ama aynı zamanda $searches[0]["part0"] yoluyla değil, sadece $searches[n]["partn"]. Zor kısmı farklı endeksleri parçaların farklı sayıda (bazı bir veya iki eksik olabilir) olması.

, Güzel, düzgün ve anlaşılabilir bir şekilde yapıyor Üzerine Düşünceler?

7 Cevap

Ben soru necromancy biliyorum, ama çok boyutlu diziler üzerinde yineleme Spl iteratörler kolaydır

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));

foreach($iterator as $key=>$value) {
    echo $key.' -- '.$value.'<br />';
}

Görmek

Esp özyinelemeli fonksiyon için iyi bir yer gibi görünüyor. Eğer derinlemesine fazla iki seviye gerekecek eğer.

function doSomething(&$complex_array)
{
    foreach ($complex_array as $n => $v)
    {
        if (is_array($v))
            doSomething($v);
        else
            do whatever you want to do with a single node
    }
}

İç içe bir foreach statment kullanmak gerekir

php manual dan

/* foreach example 4: multi-dimensional arrays */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach ($a as $v1) {
    foreach ($v1 as $v2) {
        echo "$v2\n";
    }
}

Eğer "bölümü [n]" ürün ve kullanım isset her yerinde sadece döngü aslında var olmadığını görmek ya da değil miyim?

Burada ne demek emin değilim gerçekten - kesinlikle foreach döngülerin bir çift ne ihtiyacınız yok?

foreach($array as $id => $assoc)
{
    foreach($assoc as $part => $data)
    {
	    // code
    }
}

Yoksa özyinelemeli bir şey gerekir mi? Ben örnek veri ve veri döndürdü istiyorum nasıl bir bağlamda daha yardımcı olurdu.

Bu çok boyutlu dizi düşünün, ben bu fonksiyon yardımcı olacağını umuyoruz.

$n = array('customer' => array('address' => 'Kenmore street',
                'phone' => '121223'),
      'consumer' => 'wellington consumer',
      'employee' => array('name' => array('fname' => 'finau', 'lname' => 'kaufusi'),
                     'age' => 32,
                 'nationality' => 'Tonga')
      );



iterator($n);

function iterator($arr){

    foreach($arr as $key => $val){

    if(is_array($val))iterator($val);

    echo '<p>key: '.$key.' | value: '.$val.'</p>';

    //filter the $key and $val here and do what you want
    }

}