是否可以使用foreach循环遍历两个数组的所有项目?

时间:2009-07-24 05:45:48

标签: php cakephp for-loop

我有两个数组:$Forms$formsShared

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

目前,我为Form数组中的每个$Forms设置了隐藏和切换功能。我希望为$formsShared数组中的表单启用这些函数。

如果我为$formsShared添加另一个for循环,就像这样:

<?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; ?>

我实现了我想要的,但似乎是重复相同的代码。

cakePHP中有没有办法在单个foreach循环中循环遍历两个数组?

解决方案:   array_merge()只接受array类型的参数。因此,使用类型转换来合并其他类型。

  <?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 个答案:

答案 0 :(得分:4)

听起来你不想同时遍历两个列表 。您希望分别循环遍历两个列表,为任一列表中的每个元素执行相同的代码。那么为什么不连接列表:

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

答案 1 :(得分:2)

您可以使用jQuery的selectors,而不是重复这么多JavaScript。不要在表单元素(或除此之外)上使用唯一class es,而是使用通用类名form-field。然后,您可以同时向所有人添加click事件:

$('.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');
});

此JavaScript只需输出一次,并适用于class="form-field"的所有元素。请注意,您也可以在元素上包含多个类:class="Share123 form-field"提供元素类Share123和类form-field

答案 2 :(得分:1)

你可以使用for()循环来做到这一点,虽然它看起来很讨厌:

<?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 />';
}

?>

这只是PHP示例,但您知道如何编辑它;)

编辑:

Karl是对的,重复索引并不是那么好,所以另一种解决方案,尽管你必须使用@来避免警告:

<?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 />';
}

?>