Array_dif не работает, так как вывод пуст

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

Моя установка:

// first array
$listing_products_sku = [
    '55995', '55996', '55999', '56000', '56005', '56006', '56007',
    '56008', '56021', '56022', '56023', '56024', '56029', '56030',
    '56031', '56032', '56036', '56037',
];

// second array:
$internal_products_sku = [
    '56015', '56016', '56014', '56018', '56019', '56020', '55994',
    '55995', '55996', '55997', '55998', '55999', '56000', '56001',
    '56002', '56003', '56005', '56004', '56006', '56007', '56008',
    '56009', '56010', '56011', '56012', '56013', '56017', '56021',
    '56022', '56023', '56024', '56025', '56026', '56027', '56028',
    '56029', '56030', '56031', '56032', '56033', '56034', '56035',
    '56036', '56037', '56038', '56039', '56040', '56041', '60434',
    '60435',
];

// used function:
$diff_result = array_diff($listing_products_sku, $internal_products_sku);
print_r($diff_result);

Вывод

Array ( ) 

Нужна помощь

Кто-нибудь может объяснить, почему это происходит и как я могу заставить это работать?

Пожалуйста, включите фактическое определение массива в вопрос, а не только var_dumpвывод.

yivi 20.02.2019 10:03
array_diff()возвращает значения в array1, которых нет ни в одном из других массивов, не только разница между массивами, вы можете поменять местами порядок передачи массивов.
Nigel Ren 20.02.2019 10:04

В вашем первом массиве 18 элементов, а во втором — 50. Я не буду проверять каждый из элементов, но вы уверены, что в массиве 1 есть элементы с отсутствует в массиве2?

yivi 20.02.2019 10:05

@yivi Сначала я создал 2 массива: $listing_products_sku = array(); $internal_products_sku = array(); - После этого я использую array_push(); чтобы добавить в него элементы с другой функцией, которая отлично работает, поскольку вывод массивов правильный.

nhatimme 20.02.2019 10:06

@NigelRen Если я поменяю местами эти переменные, то на выходе будет тот же список массивов с 50 элементами, что и $internal_products_sku

nhatimme 20.02.2019 10:09

@yivi Вы правы. Все элементы первого массива присутствуют в Array2. Мне нужен вывод с разницей между двумя массивами, что в данном случае должно состоять из 32 элементов, которые отличаются и не совпадают.

nhatimme 20.02.2019 10:12
3v4l.org/Do9Sg
yivi 20.02.2019 10:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

array_diff() возвращает массив из первого массива, содержащего значения, не существующие в остальных массивах (http://php.net/manual/en/function.array-diff.php). Поскольку элемент вашего первого массива уже существует во втором массиве ($internal_products_sku), поэтому он возвращает пустой массив.

Итак, чтобы найти разницу, все, что вам нужно сделать, это взять массив $internal_products_sku в качестве первого параметра, а затем проверить

$diff_result = array_diff($internal_products_sku, $listing_products_sku);
print_r($diff_result);

Теперь он вернет массив со значением, которого нет в $listing_products_sku

Вы полностью правы. Это моя ошибка. Вывод, который он дает, выглядит так же, как ключ, оканчивающийся на 49. Но если я их посчитаю, это 32 элемента. Это работает, спасибо!

nhatimme 20.02.2019 10:15

Да, посмотрите здесь array_diff с разными порядками аргументов с вашими данными: 3v4l.org/MaGdY

Progrock 20.02.2019 10:18

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