Как использовать несколько вызовов list () / each () в цикле while? - PullRequest
1 голос
/ 12 августа 2011

Я работаю с 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() в любом массиве, он напечатает информацию для этого конкретного элемента.Однако, если я попытаюсь использовать несколько команд list() в то же время, только последний list() редактор будет заполнен правильно.list() выполняет какие-то хитрые действия в фоновом режиме, которые мешают ему работать в цикле while?

Очевидно, что "легким" решением было бы использование индекса и просто форсирование проблемы, но я предпочитаю перечислятьи мне, честно говоря, просто любопытно:

Что я делаю неправильно и / или что "сломано" с list()?

Ответы [ 3 ]

2 голосов
/ 12 августа 2011

ошибка? Не знаю. вот обходной путь.

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 голос
/ 13 августа 2011

Вы можете извлечь ключи каждого массива, используя 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;
   }
}
0 голосов
/ 12 августа 2011

&& вычисляется в режиме короткого замыкания, первый оператор возвращает ложные скачки из него.В вашем случае он прекращает итерацию, как только первый массив заканчивается.list здесь должно работать нормально, так как это языковая конструкция, которая присваивает переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...