我有两个数组:$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;?>
答案 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 />';
}
?>