Bu foreach kullanarak iki dizilerin tüm öğeleri döngü mümkün mü?

3 Cevap php

$Forms ve $formsShared: Ben iki dizi var.

<?php foreach ($Forms as $r): ?>
    $("#shareform<?=$r['Form']['id'];?>").hide();
    $(".Share<?=$r['Form']['id'];?>").click(function () {
        $("#shareform<?=$r['Form']['id'];?>").toggle("show");
    });
<?php endforeach; ?>

Şu anda, $Forms dizisinin her Form için bu gizleme ve değiştirme işlevi var. Ben bu işlevleri de $formsShared dizideki formlar için etkin olmasını istiyorum.

Ben bu gibi $formsShared için döngü için başka eklerseniz:

<?php foreach ($formsShared as $r): ?>
    $("#shareform<?=$r['Form']['id'];?>").hide();
    $(".Share<?=$r['Form']['id'];?>").click(function () {
        $("#shareform<?=$r['Form']['id'];?>").toggle("show");
    });//.Share click
<?php endforeach; ?>

Ben istediğimi elde, ama aynı kodu bir tekrarı gibi görünüyor.

Tek bir foreach döngüde iki diziler döngü CakePHP'ye herhangi bir yolu var mı?

Solution: array_merge() only accepts parameters of type array. So use typecasting to merge other types.

  <?php foreach (array_merge((array)$Forms,(array)$formsShared) as $r): ?>

    $("#shareform<?=$r['Form']['id'];?>").hide();
     $(".Share<?=$r['Form']['id'];?>").click(function () {
        $("#shareform<?=$r['Form']['id'];?>").toggle("show");
    });//.Share click

  <?php endforeach;?>

3 Cevap

Bu iki liste üzerinde döngü istemiyorum gibi geliyor at the same time. Ya listedeki her bir öğe için aynı kod yürütme, ayrı ayrı iki liste üzerinde döngü istiyorum. Peki neden listeleri birleştirmek değil:

foreach (array_merge($Forms, $FormsShared) as $r)
    // do stuff

Bunun yerine çok JavaScript tekrarlayarak, sen jQuery faydalanmak olabilir selectors. Bunun yerine form elemanları (veya ek olarak) benzersiz class es kullanarak, form-field gibi genel bir sınıf adını kullanın. Sonra aynı anda hepsine bir click olayı ekleyebilirsiniz:

$('.form-field').click(function () {
    // Without knowing your HTML structure, I can't make this accurate, but maybe
    // this will work, assuming #shareform... is the parent <form> element:
    $(this).closest('form').toggle('show');
});

Bu JavaScript sadece bir kez çıkış olması gerekir ve class="form-field" tüm unsurları için geçerli olacaktır. Siz de bir eleman birden fazla sınıfları var unutmayın: class="Share123 form-field" elemanı sınıf Share123 ve sınıf verir form-field.

Sen, () döngü kullanılarak oldukça kötü görünüyor ama bunu yapabilirsiniz:

<?php

$arr1 = array('first 1', 'first 2', 'first 3');
$arr2 = array('second 1', 'second 2', 'second 3');

for($c1 = 0, $c2 = 0; $c1 < count($arr1), $c2 < count($arr2); $c1++, $c2++ )
{
    echo $arr1[$c1] . '<br />';
    echo $arr2[$c2] . '<br />';
}

?>

Bu sadece PHP örneği var, ama bunu düzenlemek için biliyorum ;)

Edit:

Karl dizinleri çoğaltma çok büyük değil, doğru, bu yüzden başka bir çözüm, sen uyarıları önlemek için @ kullanmak zorunda olsa:

<?php

$arr1 = array('first 1', 'first 2', 'first 3', 'first 4');
$arr2 = array('second 1', 'second 2', 'second 3');

for($c = 0; $c < max( count($arr1), count($arr2) ); $c++ )
{
    echo @$arr1[$c] . '<br />';
    echo @$arr2[$c] . '<br />';
}

?>