Как проверить массив на пустоту после 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 должен быть пустой, и последнее условие не должно выполняться, по идее же новых записей нет, но почему то под нулевым индексом что то есть

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

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

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

Похожие вопросы