Home > database >  PHP : multiple arrays into html table
PHP : multiple arrays into html table

Time:09-30

I have this code where I want to submit two arrays into a table in html. It works fine until I try and add the other array into the table.

enter image description here this is what it looks like before I add the next array which I want to display in the possible scores column. After I add the new array all of the rows disappear, but I am left with the column headers. I would like to keep the same format of what I have going on so far if possible.

<!DOCTYPE html>
<html>
<body>
<table border="1">

<th></th><th>Student Score</th><th>Possible Score</th><th>Percentage</th>

<?php
//Scores to table
    $Scores = fopen("scores.txt", "r");
    $Poss = fopen("Poss.txt", "r");
    $ind = 0;
    
    while(!feof($Scores)) {
        $Scoresarray[$ind] = fgets($Scores);
        $ind  ;
    }
    while(!feof($Poss)) {
        $Possarray[$ind] = fgets($Poss);
        $ind  ;
    }

    fclose($Poss);
    fclose($Scores);
    
    if(sizeof($Scoresarray,$Possarray)>1){
        $i=1;
        while($i<sizeof($Scoresarray,$Possarray)){
            echo "<tr>
            <td>".$i."</td>
            <td>".$Scoresarray[$i-1]."</td>
            <td>".$i."</td>
            <td>".$Possarray[$i-1]."</td>
            </tr>";
            
            $i  ;
        }
    }


?>

</table>
</body>
</html>

CodePudding user response:

Assuming the 2 arrays are the same length you can do...

All the counters can be removed, they are not needed, the sizeof() will only count one array at a time and is a alias for the count() function anyway so I used count()

If you use a foreach() to get the occurance and the index of an array all in one go like this foreach ($Scoresarray as $i => $score ){ you can traverse one of the arrays and using the index get the corresponding occurance from the other array as well.

$Scores = fopen("scores.txt", "r");
$Poss = fopen("Poss.txt", "r");

while(!feof($Scores)) {
    $Scoresarray[] = fgets($Scores);
}
while(!feof($Poss)) {
    $Possarray[] = fgets($Poss);
}

fclose($Poss);
fclose($Scores);

if( count($Scoresarray) > 1 && count($Possarray) > 1){
    foreach ($Scoresarray as $i => $score ){
        echo "<tr>
        <td>".$i."</td>
        <td>".$score."</td>
        <td>".$i."</td>
        <td>".$Possarray[$i]."</td>
        </tr>";
    }
}

Again assuming the files are the same length you could build an Assoc array of the values so the processing of the result becomes even easier

$Scores = fopen("scores.txt", "r");
$Poss = fopen("Poss.txt", "r");

while(!feof($Scores)) {
    $scoreAndPos[] = ['score' => fgets($Scores), 'Poss' =>fgets($Poss)];
}

foreach ($scoreAndPos as $i => $sp ){
    echo "<tr>
    <td>".$i."</td>
    <td>".$sp['score']."</td>
    <td>".$i."</td>
    <td>".$sp['poss']."</td>
    </tr>";
}

Or you could use file() which read a whole file into an array of lines.

$Scores = file("scores.txt");
$Poss = file("Poss.txt");

and then use the first foreach loop to process these 2 arrays

  • Related