Подтвердить что ты не робот

Как объединить два массива без двойных значений в php?

У меня есть два массива: 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)
4b9b3361

Ответ 1

Try:

$c = [array_merge][1]($a,$b);

var_dump([array_unique][1]($c));

Надеюсь, что это поможет

Ответ 2

Дополняя DemoUser anwer, установив флаг SORT REGULAR в качестве аргумента, я решил проблему с "преобразованием массива в строку":

$c = array_merge($a,$b);

$d = array_unique($c, SORT_REGULAR);

var_dump($d);

Ответ 3

Так как ваши массивы (база данных и форма) НЕ точно так же вы не можете вызывать функции 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