2012-04-30 3 views
0

$g에 저장된 결과는 1과 2입니다. 다음 코드는 아래에 작성했지만 내 $array['music']은 마지막 요소 인 2 만 저장합니다. SQL 쿼리를 foreach에서 두 번 실행하고 $g의 값이 1과 2가 mu_id (mu_id은 다른 테이블의 열 이름 music)으로 일치하고 행 1과 2의 모든 행 데이터가 $array['music']에 저장됩니다.배열은 PHP의 마지막 요소로 덮어 씁니다.

두 번째 행 (2)은 1이 아니라 두 번째에만 루프를 실행 중일 때 루프를 덮어 쓰고 있습니다. 작동하게하는 논리가 있다면 알려주십시오. 당신은 여기에 추가하는 것이 아니라 전체 배열마다 재 선언하고

foreach($genre as $g) 
    { 
     echo $g; 
     echo "<br>"; 
     $array['music'] = $m -> where('mu_id', $g) -> get(); 
    } 
+0

$ g는 무엇입니까? $ m이 뭐니? 변수에 적절한 이름을 지정하면 쉽게 따라 할 수 있습니다. 우리는 ABC를 다시 배울 필요가 없습니다. –

+0

@Truth : CI Datamapper 문서는 모든 예제에서 단일 문자 변수를 사용하므로 아마도이 예제를 복사하는 것일뿐입니다. 나는 그것이 나쁜 습관에 동의한다. 그러나이 경우, 나는'$ g'가 "장르"이고 "$ m"은 "음악"이라고 가정한다. 나는 또한 완전한 단어를 사용합니다. –

+0

@madmartigan 나는 그 사실을 잘 알고 있습니다. 배열의 기본을 이해하지 않고 맹목적으로 예제를 복사하는 것뿐만 아니라 직접 해선 안된다고 말하고 있습니다. –

답변

6

, 대신를 사용

foreach($genre as $g) 
{ 
    $array['music'][] = $m->where('mu_id', $g)->get(); 
} 

또는 더 나은, 더 적은 쿼리 :

$array['music'] = $m->where_in('mu_id', $genre)->get(); 
+0

고마워요. codeigniter와 datamapper를 처음 접했을 때 어떻게 작동하게 할까하고 궁금해졌습니다. 이것은 나에게 마술과 같은 것이다. 지금은 완벽하게 작동하고있어서 정말 기쁩니다. 이 얼마나 빠른 대답 !!! 다시 한번 감사드립니다 ... :) –

+1

CI와 DM 모두 정말 좋은 워드 프로세서를 가지고 있습니다. 자주 읽으십시오. 즉, 이것은 근본적인 PHP 실수였으며, PHP는 정말 좋은 문서를 가지고 있습니다. 또한 자주 참조해야합니다. –

0

당신이 원하는 경우를 모든 데이터를 배열에 저장하려면 $array['music'] 대신 $array['music'][]을 사용해야합니다.