Задать вопрос

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

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

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽