2014-12-13 3 views
0

모든 활동 목록의 배열과 아직 수행되지 않은 모든 활동 목록을 생성하는 모든 완료된 활동 목록 간의 차이점을 찾으려고합니다.다차원 배열 Diff 재귀가 PHP에서 작동하지 않습니다.

여기이 두 배열에 대한 내 PHP 코드입니다 : 내가 recursive array_diff()? 같은 여러 소스에서 제공하는 배열을 재귀 적 차이에 대한 사용자 지정 기능을 사용하고

$sql=" SELECT * FROM milestone 
     WHERE month BETWEEN '$age' - 3 AND '$age' + 3 
     ORDER BY month"; 
$result=mysqli_query($conn, $sql); 
while ($row = mysqli_fetch_array($result)) { 
    $allMilestone[] = $row; 
} 

$sql=" SELECT milestone.* FROM `milestone` 
     LEFT JOIN `milestone_transaction` 
     ON milestone.stone_id = milestone_transaction.stone_id 
     WHERE milestone_transaction.registration_no = 1111;"; 
$result=mysqli_query($conn, $sql); 
while ($row = mysqli_fetch_array($result)) { 
    $checkedMilestone[] = $row; 
} 

하지만 내 경우에 작동하지 않습니다.

나는이 또한 allMilestone, checkedMilestone & 목록 출력을 인 print_r :

$allMilestone: Array ([0] => Array ([0] => fm1 [stone_id] => fm1 [1] => 3 [month] => 3 [2] => Follow past midline [criteria] => Follow past midline) [1] => Array ([0] => fm2 [stone_id] => fm2 [1] => 3 [month] => 3 [2] => Sit look for yarn [criteria] => Sit look for yarn) [2] => Array ([0] => gm1 [stone_id] => gm1 [1] => 3 [month] => 3 [2] => Prone lifts head [criteria] => Prone lifts head) [3] => Array ([0] => gm2 [stone_id] => gm2 [1] => 3 [month] => 3 [2] => Sit head steady [criteria] => Sit head steady) [4] => Array ([0] => hl1 [stone_id] => hl1 [1] => 3 [month] => 3 [2] => Vocalises, not cry [criteria] => Vocalises, not cry) [5] => Array ([0] => hl2 [stone_id] => hl2 [1] => 3 [month] => 3 [2] => Laughs [criteria] => Laughs) [6] => Array ([0] => ps1 [stone_id] => ps1 [1] => 3 [month] => 3 [2] => Smile responsively [criteria] => Smile responsively) [7] => Array ([0] => ps2 [stone_id] => ps2 [1] => 3 [month] => 3 [2] => Resists toy pull [criteria] => Resists toy pull)) 

$checkedMilestone: Array ([0] => Array ([0] => hl1 [stone_id] => hl1 [1] => 3 [month] => 3 [2] => Vocalises, not cry [criteria] => Vocalises, not cry) [1] => Array ([0] => ps1 [stone_id] => ps1 [1] => 3 [month] => 3 [2] => Smile responsively [criteria] => Smile responsively)) 

the difference array: Array ([0] => Array ([0] => fm1 [stone_id] => fm1 [2] => Follow past midline [criteria] => Follow past midline) [1] => Array ([0] => fm2 [stone_id] => fm2 [2] => Sit look for yarn [criteria] => Sit look for yarn) [2] => Array ([0] => gm1 [stone_id] => gm1 [1] => 3 [month] => 3 [2] => Prone lifts head [criteria] => Prone lifts head) [3] => Array ([0] => gm2 [stone_id] => gm2 [1] => 3 [month] => 3 [2] => Sit head steady [criteria] => Sit head steady) [4] => Array ([0] => hl1 [stone_id] => hl1 [1] => 3 [month] => 3 [2] => Vocalises, not cry [criteria] => Vocalises, not cry) [5] => Array ([0] => hl2 [stone_id] => hl2 [1] => 3 [month] => 3 [2] => Laughs [criteria] => Laughs) [6] => Array ([0] => ps1 [stone_id] => ps1 [1] => 3 [month] => 3 [2] => Smile responsively [criteria] => Smile responsively) [7] => Array ([0] => ps2 [stone_id] => ps2 [1] => 3 [month] => 3 [2] => Resists toy pull [criteria] => Resists toy pull)) 

당신은 내가 잘못 어디로 갔는지 사람들이 사용자 정의 함수가 그들을 위해 제대로 작동하는지 말했듯이, 지정하여 나를 도울 수 있습니다.

답변

0

이것은 아마도 하나의 SQL 쿼리에서 해결할 수 있다는 사실 외에도 PHP 내장 함수를 사용하는 방법이 있습니다. 당신이 쓸 수있는 것보다 훨씬 빠릅니다.

DB에서 데이터를 가져 오는

키 같은

$allMilestone[$row['stone_id']] = $row; 
// and 
$checkedMilestone[$row['stone_id']] = $row; 

또는 무언가로 stone_id의를 사용합니다. 나는 PHP mysql 드라이버 사용에 유창하지 않다. 그러나 아마도 자기 적 배열을 반환하는 함수가있을 것이다. SELECT stone_id, ... FROM ... 사용처럼 제대로 select 문을 작성하지보다 경우

$allMilestone[$row[0]] = $row; 
// and 
$checkedMilestone[$row[0]] = $row; 

를 나중에 당신은() 함수를 array_diff_key 사용할 수 있습니다 ... 차이!

+0

하나의 mysql 쿼리를 사용하여이 문제를 해결하고 싶었지만 올바른 논리를 찾을 수 없습니다. 그러나 당신의 길은 제가 원하는 것을 할 수있게 해줍니다. 도와 줘서 고마워! –

관련 문제