PHP Foreach Loop и DOMNodeList - PullRequest
       10

PHP Foreach Loop и DOMNodeList

3 голосов
/ 07 января 2010

Я пытаюсь определить конец цикла foreach, который заполнен коллекцией DOMNodeList. В настоящее время я использую цикл for, чтобы избежать наличия «магического» числа. Я знаю, что будет только 8 столбцов, но я хотел бы, чтобы код был общим для других приложений.

Можно ли преобразовать это в цикл Foreach? Я пробовал функции end () и next (), но они не возвращают никаких данных, и я подозреваю, что они работают только с массивами, а не с этой коллекцией DOMNodeList.

Код создает файл CSV без завершающего символа ','

Токовый выход:

«Значение 1», «Значение 2», «Значение 3», «Значение 4», «Значение 5», «Значение 6», «Значение 7», «Значение 8»

Вот пример кода:

$cols = $row->getElementsByTagName("td");
$printData = true;

// Throw away the header row
if ($isFirst && $printData) {
   $isFirst = false;
   continue;
}

for ($i = 0; $i <= 8; $i++) {
   $output = iconv("UTF-8", "ASCII//IGNORE", $cols->item($i)->nodeValue);
   $output2 = trim($output);
   if ($i == 8) {
      // Last Column
      echo "\"" . $output2 . "\"" . "\n";
   } else {
      echo "\"" . $output2 . "\"" . ",";
   }
}

Ответы [ 2 ]

5 голосов
/ 07 января 2010

Вы можете использовать:

$cols->length

Чтобы получить количество элементов в DOMNodeList.

См. http://php.net/manual/en/class.domnodelist.php

Edit: Если вы измените свой код на это, вам не нужно беспокоиться о запятой или длине:

$output = array();
foreach ($cols as $item) {
   $output = iconv("UTF-8", "ASCII//IGNORE", $item->nodeValue);
   $output2 = trim($output);

   $output[] = '"' . $output2 . '"';
}
$outputstring = implode(',', $output);
1 голос
/ 07 января 2010
$cols->length

Должно дать вам количество элементов в списке

for ($i = 0; $i < $cols->length; $i++) {

// ...

if ($i == $cols->length - 1) {
// last column
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...