Beau Beau - 6 months ago 9
PHP Question

Variable Defined in Else Is Ignored in If

I'm trying to build divs based on unique values. So for each line, the script checks the team name against $tempTeam. If they're equal, the line gets added to the table in the existing div. If they're not equal, a new div and table is created, and the line is added there.

However, the if part isn't recognizing when $tempTeam is equal to the team so it never runs, even though the else part is properly setting $tempTeam. So I'm wondering why the variable is working for the else part of the code, but not the if part.

Here's the full code, although the trouble begins when I first define $tempTeam. Thanks for any help.

<?php
$csv = file_get_contents('assets/schedules.csv');

$csv_array = explode("\n", $csv);
unset($csv_array[count($csv_array) - 1]);
$headers = explode(",", $csv_array[0]);

// iterate through all lines of CSV, skipping first header line
for($i=1;$i<count($csv_array);$i++) {

$line = explode(",", $csv_array[$i]);

// iterate through all headers and assign corresponding line value
foreach ($headers as $index => $header){
$parsed_array[$i][$header] = $line[$index];
}

}

// create divs and tables
$tempTeam = '';
foreach ($parsed_array as $i => $match) {

if ($tempTeam == $match['Team']) {
echo "
<tr><td>$match[Date]</td><td>$match[Result]</td><td>$match[Location]</td><td>$match[Opponent]</td></tr>
";
}

else {
$tempTeam == $match['Team'];
echo "
<div class=\"schedule\" data-container=\"$match[League]\">
<table>
<thead>
<tr>
<th colspan=\"4\">$match[Team]</th>
</tr>
<tr>
<th>Date</th><th>Result</th><th>Location</th><th>Opponent</th>
</tr>
</thead>
<tbody>
<tr><td>$match[Date]</td><td>$match[Result]</td><td>$match[Location]</td><td>$match[Opponent]</td></tr>
";
}

echo "
</tbody>
</table>
</div>
";

}
?>

Answer

For a start, look at the first line of the else clause:

$tempTeam == $match['Team'];

I'm pretty certain that's not what you wanted to do, it seems to me that assignment would probably be a better choice than comparison.

What you're doing is no different to:

$a = 1;
$a == $a + 1;
print ($a);

which will still output 1 rather than 2. If you want do do assignment, it should have just the one = character:

$tempTeam = $match['Team'];