2010-01-06 5 views
1

J'essaie de déterminer la fin d'une boucle foreach qui est ensemencée avec une collection de DOMNodeList. Actuellement, j'utilise une boucle for pour éviter d'avoir un numéro "magique" là-bas. Je sais qu'il n'y aura que 8 colonnes, mais j'aimerais que le code me soit générique pour d'autres applications. Est-il possible de convertir cela en une boucle Foreach?PHP Foreach Loop et DOMNodeList

J'ai essayé les fonctions end() et next(), mais elles ne retournent aucune donnée et je suspecte qu'elles ne fonctionnent que sur des tableaux et non sur cette collection DOMNodeList.

Le code est la construction d'un fichier CSV sans fuite ''

Sortie courant est:

"Valeur 1", "Valeur 2", "Valeur 3", "Valeur 4", » valeur 5" , "valeur 6", "valeur 7", "valeur 8"

Voici un exemple de code:

$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 . "\"" . ","; 
    } 
} 

Répondre

5

Vous pouvez utiliser:

$cols->length 

Pour récupérer le nombre d'éléments dans un DOMNodeList.

Voir http://php.net/manual/en/class.domnodelist.php

Edit: Si vous modifiez le code que vous êtes à cela, vous n'avez pas à vous soucier de la virgule de fin, ou la longueur:

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

    $output[] = '"' . $output2 . '"'; 
} 
$outputstring = implode(',', $output); 
1
$cols->length 

devrait vous donner le nombre des éléments dans la liste

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

// ... 

if ($i == $cols->length - 1) { 
// last column