2014-12-13 5 views
0

Я пытаюсь найти разницу между массивом списка всех видов деятельности и списком всех выполненных действий, которые приведут к списку всех действий, которые еще не выполнены.Многомерный массив Diff Рекурсивный не работает в PHP

вот мой PHP код для этих 2 массивов:

$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; 
} 

Я использую пользовательскую функцию для массива рекурсивной разницы, представленной несколько источников, как recursive array_diff()?, но он не работает для моего случая.

Я также print_r выход для allMilestone, checkedMilestone & список:

$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. Которые намного быстрее, чем все, что вы можете написать.

При извлечении данных из БД использовать stone_id S в качестве ключей

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

или что-то вроде этого. Я не уверен в использовании драйвера php mysql, но, вероятно, есть функция, которая возвращает ассоциативный массив. Если не чем выписывать селекты заявления должным образом, как SELECT stone_id, ... FROM ... и использование:

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

В дальнейшем вы можете использовать array_diff_key функции(), чтобы ... разница!

+0

Я хотел решить это, используя один mysql-запрос, но я не могу найти правильную логику. Но ваш путь позволяет мне делать то, что я хочу. Большое спасибо за помощь! –

Смежные вопросы