我有两个数组:$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()只接受类型数组的参数。因此,使用类型转换合并其他类型。
<?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;?>发布于 2009-07-24 05:58:12
听起来好像你不想同时循环两个列表。您希望分别循环两个列表,对两个列表中的每个元素执行相同的代码。那么,为什么不将列表连接起来:
foreach (array_merge($Forms, $FormsShared) as $r)
// do stuff发布于 2009-07-24 06:06:48
与其重复这么多JavaScript,不如使用jQuery的选择器。不要在表单元素上使用唯一的classes (或者除了),而是使用像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。
发布于 2009-07-24 06:08:52
使用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 />';
}
?>https://stackoverflow.com/questions/1175893
复制相似问题