2013-02-15 116 views
1

$ result包含來自數據庫查詢的數據項的數組。使用PHP foreach的多個循環?

$ A是一個空數組。我也創建了一個名爲$ B的空數組,等等。

我想遍歷字母表中的所有26個字母。對於每個字母,我想循環遍歷包含數據庫查詢結果的數組,並將它們推送到它們各自的數組中。所以'Ant'和'Antelope'被推到陣列$ A上,'Buffalo'被推到陣列$ B上,等等。

這裏是我的問題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++; 
} 
  1. 我認爲內部數組指針被移動到$結束的結果,因爲我只得到字母開頭的動物被推到數組$ A 。所有其他數組($ B,$ C等)都是空的。無論如何它只能工作一次(對於字母A)。重置($結果)似乎不工作。我如何循環$ result多次(26)次?

  2. 如何在通過字母循環時更改要推入的數組?換句話說,當$字母增加到B我想要:array_push($ B,$ topic-> animal);

在此先感謝。

+0

不能增加'$這樣的信' – 2013-02-15 18:26:09

+1

@BrendanBullen是的,你可以。 – 2013-02-15 18:27:07

+0

@Kolink啊是的!確實可以。那麼,你每天都會學到新的東西。 – 2013-02-15 18:31:46

回答

4
  1. 你一直在推進A,所以它是有道理的,它不會影響任何其他陣列。
  2. 您可以使用array_push($$letter,$topic->animal);(可變變量),但它不建議 - 你應該使用一個嵌套的數組insted的與array_push($letters[$letter],$topic->animal)

這就是說,試試這個:

$letters = Array(); 
foreach($result as $topic) { 
    $letters[substr($topic->animal,0,1)][] = $topic->animal; 
} 
+0

好評!但是你應該輸入array()lowercased。 – 2013-02-15 18:29:28

+0

@kolink擊敗了我,這是我的:http://codepad.org/vceT9K2t – mkaatman 2013-02-15 18:34:49

+0

@BramGerritsen如果它是我自己的代碼,它會是'$ letters = [];'而不是,但它不是那麼好。或者一些XD – 2013-02-15 18:42:14