2012-05-24 3 views
-1

Le code ci-dessous affiche la liste de tous les fichiers .csv d'un répertoire. J'ai créé la fonction csvcolumnsum pour extraire des informations de chaque fichier (la somme de toutes les valeurs dans la colonne 3) et l'injecter dans chaque élément de la liste.La fonction PHP insère des valeurs au mauvais endroit

La sortie HTML doit ressembler à ceci:

<li>Filename (sum)</li> 

Mais il vient comme ça:

sum<li>Filename()</li> 

peut pointer quelqu'un pourquoi cela se produit? Voici le code pertinent.

require("csvcolumnsum.php"); 

echo "<ul class=\"users\">"; 
$handle=opendir("data"); 
while (($file = readdir($handle))!==false) { 
    $file = preg_replace("/\\.[^.\\s]{3}$/","",$file); 
    if (preg_match('/[^\.]/i', $file)) { 
     $value = csvcolumnsum("data/".$file.".csv",3); 
     echo "<li><a href=\"?form_name=$file\">$file("; 
     echo $value; 
     echo ")</a></li>"; 
    } 
} 
closedir($handle); 
echo "</ul>"; 

csvcolumnsum.php

function csvcolumnsum($filename,$col) { 
    $handle2 = fopen($filename, 'r'); 
    $data = fgetcsv($handle2); 

    foreach ($data as $headercolumn) {} 
    while ($data = fgetcsv($handle2)) { 
     $sum += $data[$col]; 
    } 

    echo "<span>$sum</span>"; 

    fclose($handle2); 
} 
+0

vous devriez regarder un tutoriel sur PHP ou le fonctionnement des langues en général. Essayer de "renvoyer" quelque chose à la fonction parente montre une profonde incompréhension de ce qui se passe ici. – meagar

Répondre

2

Ce n'est pas comment echo fonctionne. Si votre voulez que votre fonction de communiquer une valeur à la fonction appelante, votre fonction doit return la valeur, non echo il:

return "<span>$sum</span>"; 

Echo écrit directement à la sortie standard, ce qui signifie cette ligne:

$value = csvcolumnsum("data/".$file.".csv",3); 

impressions avant ces lignes:

echo "<li><a href=\"?form_name=$file\">$file("; 
echo $value; 
echo ")</a></li>"; 

exécution de retour dans la fonction arrête en cours, ce qui signifie votre close devra se produire avant return:

function csvcolumnsum($filename,$col) { 
    $handle2 = fopen($filename, 'r'); 

    # ... 

    fclose($handle2); 

    return "<span>$sum</span>"; 
} 
1

Vous êtes echo ing pas return ing dans la fonction csvcolumnsum.

1

vous font écho à la somme que vous devez le retourner,

function csvcolumnsum($filename,$col) { 
    $handle2 = fopen($filename, 'r'); 
    $data = fgetcsv($handle2); 

    foreach ($data as $headercolumn) {} 
    while ($data = fgetcsv($handle2)) { 
     $sum += $data[$col]; 
    } 

    return "<span>$sum</span>"; 

    fclose($handle2); 
} 
Questions connexes