проверить, является ли значение одинаковым в цикле while - PullRequest
1 голос
/ 02 ноября 2010

Я конвертирую CSV-файл в xml, используя следующую функцию:

Я хочу повторить то же действие, если значение $ records [$ row] совпадает с предыдущим разом, когда оно повторялось.Как мне это сделать?

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
  $num = count($data);
  $records[] = $data;

  $stringData .= '<PayTo PTPayeeID="' . $records[$row][2];

  // if the value of $records[$row][2] is the same I want to repeat an action.
  echo "<div id=\"row\"><div id=\"num\">" .$row. "</div>";
  $row++;

  for ($c=0; $c < $num; $c++) {
     if ($c != 1) {
       echo "<div class=\"field\">" . $data[$c] . "</div>";
     }
  }
}

Ответы [ 3 ]

6 голосов
/ 02 ноября 2010

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

$prevValue = NULL;
while(condition) {
 if ($curValue == $prevValue) {
  .
  . do stuff
  .
 }
 $prevValue = $curValue;
}
3 голосов
/ 02 ноября 2010

Перед циклом while выполните:

$prevRow2 = '';

Затем вы можете сравнить:

if ($records[$row][2] == $prevRow2) {
    // it's the same as the last time!
}

После использования $records[$row][2] просто скопируйте его в $prevRow2 перед продолжением цикла while.

(Если возможно, что $records[$row][2] может быть пустой строкой, и вы не хотите, чтобы она соответствовала первой итерации, создайте логическое значение $firstTime, чтобы проверить это.)

0 голосов
/ 02 ноября 2010
if (count($records)>1&&$records[count($records)-1]===$records[count($records)-2]) {
  //do something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...