2013-02-15 89 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