PHP я могу сделать этот цикл? - PullRequest
0 голосов
/ 13 августа 2010

У меня есть цикл (основанный на массиве - который может увеличиваться, но НЕ слишком сильно - максимум 6 ключей), например: array('12','34','56',48'). То, что я хотел бы сделать, это перебрать массив и затем снова цикл, чтобы найти «предыдущий» массив val.

Например, key[0] = 12, key[1] = 34, затем key[0] = 12, key[2] = 56, затем key[1] = 34 и т. Д.

Значения массива - это идентификаторы из БД, и мне нужно (надеюсь) выполнить запрос на основе «текущего ключа» и предыдущего ключа.

Есть идеи - можно ли это сделать?

Ответы [ 5 ]

3 голосов
/ 13 августа 2010
$num_elem = count($array); 
for ($i = 0; $i < $num_elem; $i++)
{
   $curr_val = $array[$i];
   $prev_val = ( 0 == $i) ? null: $array[$i-1];
}
2 голосов
/ 13 августа 2010

В отличие от других решений, я бы рекомендовал против , используя индексный метод доступа.

В php ключи не обязательно в порядке. Например, если вы вызываете natsort для вашего массива, отношения key=>value остаются прежними, но сам массив фактически переупорядочивается, что приводит к противоречивым результатам. (См. Почему здесь не работает natsort (или natcasesort)? )

Я бы использовал что-то вроде:

<?php
  $ids = array('12','34','56','48');
  $previous = false;
  foreach($ids as $id)
  {
    echo "current: $id\n";
    echo "previous: $previous\n";
    $previous = $id;
  }
?>
1 голос
/ 13 августа 2010

Я не думаю, что здесь действительно нужны несколько циклов. Я бы использовал внутренний указатель массива с функциями next(), prev() и current().

0 голосов
/ 13 августа 2010
<?
$val = 56;
$data = array(12, 34, 12, 56, 34);
for($i = 0; $i < count($data); $i++) {
  if($data[$i] == $val) {
    if($i == 0) die("No previous");
    $previous = $data[$i-1];
  }
}

echo "Previous to $val was $previous";

или, что еще лучше, используйте array_search () найти индекс для данного $ val

0 голосов
/ 13 августа 2010

Если я правильно понял, вы хотите это сделать.

for($i=1; $i < count($array); $i++) {
  $currentValue = $array[$i];
  $previousValue = $array[$i-1];

  // Here you can run a query based on the current and the previous value
}

Например, если принять $array за array(12,34,56,48), у вас будет 3 итерации, где $currentValue и $previousValue будутимеют следующие значения:

  1. Первая итерация: $ currentValue = 34, $ previousValue = 12
  2. Вторая итерация: $ currentValue = 56, $ previousValue = 34
  3. Третья итерация: $ currentValue = 48, $ previousValue = 56
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...