foreach php statment

7 Cevap php

Ben örneğin içine bir iki foreach deyimi birleştirmek gerekiyor

foreach ($categories_stack as $category)
foreach ($page_name as $value)

Ben aynı foreach deyimi içine bu eklemek gerekir

Bu yüzden ne olursa mümkün mü?

teşekkürler

7 Cevap

(I am not sure I have understood your question completely. I am assuming that you want to iterate through the two lists in parallel)

Aşağıdaki gibi for döngü kullanarak yapabilirsiniz:

$n = min(count($category), count($value));
for($c = 0; $c < $n; $c = $c + 1){
    $categories_stack = $category[$c];
    $pagename = $value[$c];
    ...
}

Ile aynı ulaşmak için foreach Eğer Python zip() işlevine benzer bir işlev gerekir.

Python, olurdu:

for categories_stack, pagename in zip(categories, values):
     print categories_stack, pagename

PHP bir standart zip() işlevi yok çünkü, kendi üzerinde böyle bir işlevi yazmak veya for döngü çözümü ile gitmek gerekir.

Eğer istediğin buysa sen iç içe foreachs yapabilirsiniz. Ama verilerin daha bilmeden, bu yardımcı olmadığını söylemek imkansız:

foreach ($categories_stack as $category) {
    foreach ($page_name as $value) {
    }
}

Muhtemelen bir kategorideki tüm sayfaları yazdırmak istiyor? Muhtemelen işe yaramaz, bu yüzden biraz diziler gibi bakmak ve birbirleriyle nasıl ilişki hakkında daha fazla bilgi verebilir misiniz?

Bu döngü uzun dizinin uzunluğuna devam ediyor ve diziler ya eşleşen hiçbir unsur vardır nerede boş dönecektir. Bunu bir deneyin!

$a = array(1 => "a",25 => "b", 10 => "c",99=>"d");
$b = array(15=>1,5=>2,6=>3);

$ao = new ArrayObject($a);
$bo = new ArrayObject($b);
$ai = $ao->getIterator();
$bi = $bo->getIterator();
for (
    $ai->rewind(),$bi->rewind(),$av = $ai->current(),$bv = $bi->current();
    list($av,$bv) =
        array(
            ($ai->valid() ? $ai->current() : null),
            ($bi->valid() ? $bi->current() : null)
        ), 
    ($ai->valid() || $bi->valid());
    ($ai->valid() ? $ai->next() : null),($bi->valid() ? $bi->next() : null))
{
    echo "\$av = $av\n";
    echo "\$bv = $bv\n";
}

Ben gerçekten iki dizileri çekmesini istediğiniz tam olarak nasıl sorusuna söyleyemem. İç içe bir foreach sadece yazmak için

foreach ($myArray as $k => $v) {
    foreach ($mySecondArray as $kb => $vb {
    }
}

Ancak geri çağırma işlevleri bazı yaratıcı kullanımı ile şeyler her türlü yapabilirsiniz. Bu durumda, bir anonim işlev her tekrarında her diziden iki öğe dönen. Bu bir dizi olarak yineleme değerini kullanmak veya altında yapılır gibi list() kullanarak değişkenlere bölmek sonra kolaydır.

Bu da ne olursa olsun anahtar yapısı çalışma yararı vardır. Ben sadece dizi elemanlarının sipariş üzerine dayanıyor. Elemanları düzenin dışında ise sadece uygun sıralama işlevini kullanın.

Bu hata rapor var gibi dizilerin uzunluğu hakkında endişe, bu yüzden boş değerler için bir göz tutmak emin yapmaz.

$a = array("a","b","c");
$b = array(1,2,3);
foreach (
        array_map(
            create_function(
                '$a,$b', 'return array($a,$b);'
            )
            ,$a,$b
        )
        as $value
    ) 
{
    list($a,$b) = $value;
    echo "\$a = $a\n";
    echo "\$b = $b\n";
}

Çıktı

$a = a
$b = 1
$a = b
$b = 2
$a = c
$b = 3

İşte biten listelerden birini durur sizin için başka biri. Kullanarak aynı min(count(a),count(b). Faydalı Eğer aynı uzunlukta diziler varsa. Birisi devam yapabilirsiniz ise max(count(a),count(b)) bana bildirin.

$ao = new ArrayObject($a);
$bo = new ArrayObject($b);
$ai = $ao->getIterator();
$bi = $bo->getIterator();
for (
    $ai->rewind(),$bi->rewind();
    $av = $ai->current(),$bv=$bi->current();
    $ai->next(),$bi->next())
{
    echo "\$av = $av\n";
    echo "\$bv = $bv\n";
}

Döngüsü için saygıdeğer kullanışlı giriyor:

for(
    $i = 0,
    $n = sizeof($categories_stack),
    $m = sizeof($page_name);

    $i < $n && $i < $m;

    $i++
) {
    $category = $categories_stack[$i];
    $value = $page_name[$i];

    // do stuff here ....
}

Elbette sadece döngü önce dizilerini birleştirebilirsiniz?

$data = array_merge($categories_stack, $page_name);

foreach($data AS $item){
...
}

Eğer foreach kapsamı dışında değişkenler veya prehaps ile sadece yuva onları KVP kurulum benzer bir dizi olarak içeriği depolamak? Benim cevabım belirsiz ama ben bunu gerçekleştirmek için çalışıyoruz neden gerçekten emin değilim.

Dizi elemanları birbiri ile doğrudan yazışma var mı, yani her bir eleman için $page_name bir unsur var $categories_stack? Eğer öyleyse, sadece tuşları and değerleri (onlar aynı tuşları varsayarak) üzerinde yineleme:

foreach ($categories_stack as $key => $value)
{
    $category = $value;
    $page = $page_name[$key];

    // ...
}