PHP array_diff_assoc () сравнивает массивы с несколькими определениями

У меня есть 2 массива, чтобы найти разницу

Array1

array (size=5)
  0 => 
    array (size=1)
      'id' => string '1' (length=1)
  1 => 
    array (size=1)
      'id' => string '2' (length=1)
  2 => 
    array (size=1)
      'id' => string '3' (length=1)
  3 => 
    array (size=1)
      'id' => string '4' (length=1)
  4 => 
    array (size=1)
      'id' => string '5' (length=1)

array2

array (size=1)
  0 => 
    array (size=1)
      'user_id' => string '1' (length=1)

Я использую функцию array_diff_assoc, чтобы получить разницу.

Проблема:

Notice: Array to string conversion at array_diff_assoc()

Есть ли функция, которая может сравнивать массивы в массивах?

2 ответа

Решение

Просто попробуйте с array_column:

$array1 = array(
    array('id' => 1),
    array('id' => 2),
    array('id' => 3),
    array('id' => 4),
    array('id' => 5),
);
$array2 = array(
    array('user_id' => 1),
);

$diff = array_diff(array_column($array1, 'id'), array_column($array2, 'user_id'));

var_dump($diff);

Выход:

array (size=4)
  1 => int 2
  2 => int 3
  3 => int 4
  4 => int 5

Я чувствую, что вы должны использовать array_diff_key() вместо array_diff_assoc() так как array_diff_assoc() не ищет рекурсивно Он пытается уведомить пользователя, что одно из значений в массиве также является массивом, и ему пришлось преобразовать его в строку.

Другие вопросы по тегам