У меня есть два массива: 1. каждый объект представляет собой строку, полученную из базы данных.
array 1 => object(stdClass)[41] public 'id' => string '1' (length=1) public 'class_id' => string '25' (length=2) public 'section_id' => string '2' (length=1) public 'student_id' => string '1' (length=1) public 'date' => string '2011-11-27' (length=10) public 'attendance' => string 'present' (length=7) 2 => object(stdClass)[41] public 'id' => string '1' (length=1) public 'class_id' => string '25' (length=2) public 'section_id' => string '2' (length=1) public 'student_id' => string '3' (length=1) public 'date' => string '2011-11-27' (length=10) public 'attendance' => string 'present' (length=7)
2. Другой массив из моей формы, и это выглядит так.
array 0 => array 'class_id' => string '25' (length=2) 'section_id' => string '2' (length=1) 'student_id' => int 1 'date' => string '2011-11-27 00:00:00' (length=19) 'attendance' => string 'present' (length=7) 1 => array 'class_id' => string '25' (length=2) 'section_id' => string '2' (length=1) 'student_id' => int 2 'date' => string '2011-11-27 00:00:00' (length=19) 'attendance' => string 'present' (length=7)
Здесь я хочу сделать следующее:
– сравните эти два и проверьте, находятся ли key student_id и дата уже в базе данных или нет.
– и из второго массива, который из данных формы, удаляет дубликат и вставляет в данные.
Конечным результатом будет:
array 0 => array 'class_id' => string '25' (length=2) 'section_id' => string '2' (length=1) 'student_id' => int 2 'date' => string '2011-11-27 00:00:00' (length=19) 'attendance' => string 'present' (length=7)
Пытаться:
$ c = [array_merge] [1] ($ a, $ b); var_dump ([array_unique] [1] ($ с));
Надеюсь, поможет
В дополнение к анонсу DemoUser, установив флаг SORT REGULAR в качестве аргумента, я решил проблему «преобразование массива в строку»:
$c = array_merge($a,$b); $d = array_unique($c, SORT_REGULAR); var_dump($d);
Поскольку ваши массивы (база данных и форма) НЕ являются точно такими же, вы не можете вызывать функции array_merge или array_unique. Вам нужно будет перебирать строки базы данных один раз и сохранять в возвращаемых значениях в отдельном массиве на основе ключа (Карта). Затем итерация через форму возвращает массив и поиск в предварительно подготовленном массиве для ключа, и если он найден, просто удалите этот элемент из возвращаемого массива формы. Рассмотрим следующий фрагмент кода для этого:
// assuming database returned rows are in $rows array // assuming form returned records are in $forms array $dbArray = array(); foreach($rows as $r) { // need to convert string to int and string to date to match data in both sets $dbArray[ array( (int) $r->student_id, strtotime($r->date) ) ] = 1; } $diffArray = array(); foreach($forms as $f) { $key = array( $f['student_id'], strtotime($f['date']) ); if (!array_key_exists($key, $dbArray)) $diffArray[] = $f; } // now $diffArray will have the final result you're looking for