如何在while循环中使用多个list()/ each()调用?

时间:2011-08-12 19:09:20

标签: php while-loop

我正在使用3个不同的阵列(虽然我暂时只测试了两个)并且我正在尝试处理$_POST上的数组。我目前正在使用:

while(list($key_member,$member)=each($_POST['member_ids']) 
    && list($key_amount,$amount)=each($_POST['payment_amounts']))
{
    echo "MEMBER: $member<br>";
    echo "AMOUNT: $amount<br><br>";
}

如果我在任一阵列上使用一个list(),它将打印该特定项目的信息。但是,如果我尝试在while中使用多个list()命令,则只会正确填充最后一个list() ed项。 list()是否在背景中做了一些阻止它在while循环中工作的技巧?

显然,“简单”解决方案是使用索引并简单地强制解决问题,但我更喜欢枚举 - 而且老实说我只是好奇

我做错了什么,和/或用list()“破坏”了什么?

3 个答案:

答案 0 :(得分:2)

错误?不知道。 这是一个解决方法。

while(list($key_member,$member)=each($_POST['member_ids'])){
   list($key_amount,$amount)=each($_POST['payment_amounts']);
   echo "MEMBER: $member<br>";
   echo "AMOUNT: $amount<br><br>";
}

答案 1 :(得分:1)

您可以使用array_keys()提取每个数组的键,这会产生一个索引数组,然后为每个数组保留单独的循环计数器:

$member_ids = array_keys($_POST['member_ids']);
$amounts = array_keys($_POST['payment_amounts']);

$mi = 0;
$am = 0;
while(1) {
   ...

   $mi++
   $am++;
   if (count($member_ids) >= $mi) && (count(amounts) >= $am) {
      break;
   }
}

答案 2 :(得分:0)

&&以短路方式进行评估,第一个返回false跳转的语句。在你的情况下,它会在第一个数组结束时停止迭代。 list在这里应该可以正常工作,因为它是一个分配变量的语言结构。