Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以使用foreach遍历两个数组的所有项?_Php_Cakephp_For Loop - Fatal编程技术网

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

Php 是否可以使用foreach遍历两个数组的所有项?,php,cakephp,for-loop,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

我有两个数组:
$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; ?>
我实现了我想要的,但这似乎是相同代码的重复

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

$(“#shareform”).hide();
$(“.Share”)。单击(函数(){
$(“#共享表单”)。切换(“显示”);
});//.共享点击

听起来你不想同时在两个列表上循环。您希望分别在两个列表上循环,对任一列表中的每个元素执行相同的代码。那么,为什么不将列表串联起来:

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

听起来你不想同时在两个列表上循环。您希望分别在两个列表上循环,对任一列表中的每个元素执行相同的代码。那么,为什么不将列表串联起来:

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

您可以利用jQuery的功能,而不是重复这么多JavaScript。不要在表单元素(或除此之外)上使用唯一的
class
es,而是使用像
formfield
这样的通用类名。然后,您可以同时将
单击
事件添加到所有事件:

$('.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');
});
$('.form字段')。单击(函数(){
//如果不知道你的HTML结构,我就无法准确地表达出来,但也许
//假设#shareform…是父元素,这将起作用:
$(this).closest('form')。toggle('show');
});

此JavaScript只需输出一次,并将应用于具有
class=“form field”
的所有元素。请注意,一个元素上也可以有多个类:
class=“Share123 form field”
提供了元素类
Share123
和类
form field
,您可以使用jQuery的。不要在表单元素(或除此之外)上使用唯一的
class
es,而是使用像
formfield
这样的通用类名。然后,您可以同时将
单击
事件添加到所有事件:

$('.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');
});
$('.form字段')。单击(函数(){
//如果不知道你的HTML结构,我就无法准确地表达出来,但也许
//假设#shareform…是父元素,这将起作用:
$(this).closest('form')。toggle('show');
});
此JavaScript只需输出一次,并将应用于具有
class=“form field”
的所有元素。请注意,在一个元素上也可以有多个类:
class=“Share123 form field”
提供元素类
Share123
和类
form field
,您可以使用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 />';
}

?>

您可以使用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 />';
}

?>


+1这是我的建议,但它们在PHP中称为数组,而不是列表。您理解正确,但串联不起作用..:(您的代码现在可以工作了,在合并之前必须将列表类型转换为数组。。非常感谢。+1这是我的建议,但它们在PHP中称为数组,而不是列表。您理解正确,但串联不起作用。:(你的代码现在可以工作了,必须在合并前将列表类型转换为数组..非常感谢..由于有两个索引,你仍然在那里复制代码,所以你最好只使用两个单独的for block。你是对的,我用另一个只使用一个索引的解决方案更新了答案。起初我认为这也是OP想要的,但他想要的是按顺序(一个接一个)循环两个数组,但不使用两个for循环。由于有两个索引,您仍在复制其中的代码,因此您最好只使用两个单独的for块。您是对的,我用另一个只使用一个索引的解决方案更新了答案。起初我认为这也是OP想要的,但他想要的是依次循环两个数组(一个接一个),但不使用两个for循环。如果我有一个通用类名,并将click函数应用于该类,那么如果我单击一个链接,该表单将显示我没有单击的所有其他链接,因为它们有一个通用类名。实际上,这正是我将表单id附加到该类的原因,以区分它们的唯一性y、 当
click
事件处理程序中的代码为所有元素共享时,它将
this
引用设置为被单击的特定元素。因此,如果您获得要切换的元素,则相对于
$(this)
,您将只隐藏您想要的一个元素。可以说,这是您应该这样做的,因为它将动态地、更高效地工作,而不是依赖于PHP输出。如果我有一个通用类名,并将click函数应用于该类,那么如果我单击一个链接,该表单将显示所有其他我没有单击的链接单击,因为它们有一个共同的类名。事实上,这正是我将表单id附加到类的原因,以唯一地区分它们。虽然
单击
事件处理程序中的代码对于所有元素都是共享的,但它将
引用集设置为被单击的特定元素。因此,如果您获得ele如果您想要切换,相对于
$(this)
,您将只隐藏一个您想要的元素。可以说,这是您应该做的,因为它将动态工作