Как проверить массив на пустоту после array_diff?

Добрый день, новичок в PHP, столкнулся с проблемой, а именно имеется 2 массива, между которыми нахожу разницу

<?php

$o = "1|2|3";
$n = "";
$old = explode ("|", $o);
$new = explode ("|", $n);

$add = array_diff($new, $old);
$rem = array_diff($old, $new);

if (!empty($rem)) {
  print 'REM: ';
  print_r ($rem);
}

if (!empty($add)) {
  print 'ADD: ';
  print_r ($add);
}


Проблема в том, что на выходе получаю

REM: Array ([0] => 1[1] => 2[2] => 3 ) ADD: Array ([0] => )


Хотя подразумеваю, что $add должен быть пустой, и последнее условие не должно выполняться, по идее же новых записей нет, но почему то под нулевым индексом что то есть

В чём моя ошибка, подскажите пожалуйста
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Всё логично. С точки зрения PHP пустая строка - это тоже строка.
explode разбивает строку по разделителям, предполагая, что вам надо разбить список в массив. Но что, если в списке один элемент? Тогда разделителей не будет и на выходе должен получиться массив из одного элемента. Вот вы и получаете массив из этого элемента - пустой строки.
Вы можете просто предварительно проверить, что строка непустая.
Ответ написан
@Vitsliputsli
но почему то под нулевым индексом что то есть

Документация по explode:
Если delimiter не содержится в string, и используется отрицательный limit, то будет возвращен пустой массив (array), иначе будет возвращен массив, содержащий string.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы