2013-02-15 4 views
1

$ result에는 데이터베이스 쿼리의 데이터 항목 배열이 포함되어 있습니다.PHP foreach를 사용하는 다중 루프?

$ A는 빈 배열입니다. 또한 $ B라는 빈 배열을 만들었습니다.

알파벳 26자를 모두 반복하고 싶습니다. 각 문자에 대해 데이터베이스 쿼리 결과가 포함 된 배열을 반복하고 각 배열에 푸시합니다. 따라서 'Ant'와 'Antelope'는 배열 $ A에, 'Buffalo'는 배열 $ B에 푸시됩니다.

  1. $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++; 
    } 
    
    내가 내부 배열 포인터가 A는 배열 $ A를에 밀려 난 단지 글자로 시작하는 동물을 얻을 수 있기 때문에 결과 $의 끝으로 이동하는 생각 :

    여기 내 문제 PHP의 . 다른 모든 배열 ($ B, $ C 등)은 비어 있습니다. 어쨌든 한 번만 작동합니다 (문자 A의 경우). reset ($ result)이 작동하지 않는 것 같습니다. $ 결과를 여러 번 (26) 회 반복 할 수 있습니까?

  2. 문자를 반복 할 때 푸시 할 배열을 어떻게 변경합니까? 즉, $ letter가 B로 증가 할 때 나는 원하는 것이다 : array_push ($ B, $ topic-> animal);

미리 감사드립니다.

+0

당신은'$를 증가 할 수 편지 '처럼. –

+1

@ 브리드 던 버그 예. –

+0

@Kolink 아 맞습니다! 정말로하실 수 있습니다. 음, 매일 새로운 것을 배웁니다. –

답변

4
  1. 항상 A으로 이동하므로 다른 배열에는 영향을 미치지 않습니다. -
  2. 당신은 array_push($$letter,$topic->animal); (가변 변수)를 사용할 수 있지만하지 않는 것이 좋습니다 중첩 배열 말했다 array_push($letters[$letter],$topic->animal)

와 insted 사용해야합니다,이 시도 :

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

좋은 의견! 그러나 array()를 lowercased라고 입력해야합니다. –

+0

@kolink 이길 때까지 여기에 내 걸렸어 : http://codepad.org/vceT9K2t – mkaatman

+0

@BramGerritsen 그것이 내 자신의 코드라면'$ letters = [];'이 될 것이지만 그게 그렇지 않다. . 아니면 뭔가 XD –