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)
,您将只隐藏一个您想要的元素。可以说,这是您应该做的,因为它将动态工作