Reputation: 1998
$result contains an array of data items from a database query.
$A is an empty array. I also have created an empty array called $B and so on.
I want to loop through all 26 letters of the alphabet. For each letter I want to loop through the array containing my database query results and push them onto their respective array. So 'Ant' and 'Antelope' get pushed onto array $A, 'Buffalo' onto array $B and so on.
Here's my problem PHP:
$letter = 'A';
for($count = 1; $count <= 26; ++$count) {
foreach ($result as $topic) {
if (substr($topic->animal, 0, 1) == $letter //the first letter is A, B...
array_push($A, $topic->animal);
}
}
}
$letter++;
}
I think the internal array pointer is being moved to the end of $result because I only get animals starting with the letter A being pushed onto array $A. All other arrays ($B, $C etc.) are empty. In any case it only works once (for the letter A). reset($result) doesn't seem to work. How can I loop through $result multiple (26) times?
How do I change the array to be pushed onto when looping through the letters? In other words when $letter is incremented to B I want: array_push($B, $topic->animal);
Thanks in advance.
Upvotes: 1
Views: 1052
Reputation: 324620
A
, so it makes sense that it won't affect any other array.array_push($$letter,$topic->animal);
(Variable variables) but it's not recommended - you should use a nested array insted with array_push($letters[$letter],$topic->animal)
That said, try this:
$letters = Array();
foreach($result as $topic) {
$letters[substr($topic->animal,0,1)][] = $topic->animal;
}
Upvotes: 4