首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用foreach循环两个数组的所有项?

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

Stack Overflow用户
提问于 2009-07-24 05:45:47
回答 3查看 1.5K关注 0票数 1

我有两个数组:$Forms$formsShared

代码语言:javascript
复制
<?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循环,如下所示:

代码语言:javascript
复制
<?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()只接受类型数组的参数。因此,使用类型转换合并其他类型。

代码语言:javascript
复制
  <?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;?>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-24 05:58:12

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

代码语言:javascript
复制
foreach (array_merge($Forms, $FormsShared) as $r)
    // do stuff
票数 4
EN

Stack Overflow用户

发布于 2009-07-24 06:06:48

与其重复这么多JavaScript,不如使用jQuery的选择器。不要在表单元素上使用唯一的classes (或者除了),而是使用像form-field这样的通用类名。然后,您可以同时向所有这些事件添加一个click事件:

代码语言:javascript
复制
$('.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
EN

Stack Overflow用户

发布于 2009-07-24 06:08:52

使用for()循环可以做到这一点,尽管它看起来非常讨厌:

代码语言:javascript
复制
<?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是对的,复制索引不是很好,所以另一种解决方案,尽管您必须使用@来避免警告:

代码语言:javascript
复制
<?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 />';
}

?>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1175893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档