разнесение по пустой строке возвращает массив длиной 1

#php

#php

Вопрос:

Есть ли в PHP функция разделения, которая работает аналогично JavaScript split()? По какой-то причине explode() возвращает массив длиной 1, когда задана пустая строка.

Пример:

 $aList = explode(",", "");    -> to return a 0-length array
$aList = explode(",", "1");   -> to return a 1-length array  $aList[0] = 1
$aList = explode(",", "1,5"); -> to return a 2-length array  $aList[0] = 1 and $aList[1] = 5
 

Комментарии:

1. Попробуйте использовать preg_split('~,~',$some_string,-1,PREG_SPLIT_NO_EMPTY) с PREG_SPLIT_NO_EMPTY флагом. php.net/manual/en/function.preg-split.php

2. Любое разделение или разнесение вернет 1. В общем, это все, что осталось. Не удается «разделить» на то, чего не существует. Таким образом, возвращаемое значение является исходным значением в set .

3. Спасибо @bassxzero. Похоже, это сработало!

Ответ №1:

У меня есть два предложения для вас

1. проверьте пустую строку перед разнесением

 if( strlen($str) ){
    $aList = explode(",", $str);
}
 

2. используйте empty метод для проверки массива

 $aList = explode(",", $str);

if( empty($aList) ){}

if( !empty($aList) ){}
 

Комментарии:

1. Это кажется большой работой, когда дело доходит до использования $aList во всем остальном коде.

2. конечно, да, но я не знаю лучшего способа

3. preg_split(‘~,~’,$some_string,-1,PREG_SPLIT_NO_EMPTY) выглядит уродливее, но делает свое дело. Благодаря @bassxzero

Ответ №2:

Все, что вам нужно сделать, это проверить возвращаемое значение «explode()»:

https://www.php.net/manual/en/function.explode.php

Если разделителем является пустая строка («»), explode() вернет FALSE.

PS:

В: В чем смысл «массива из 1»?

Строка, которая не содержит разделителя, просто вернет массив исходной строки длиной в один элемент (здесь «пустая» строка).

«GetSet» очень хорошо выразился в своем комментарии выше:

Любое разделение или разнесение вернет 1. Логически, это все, что осталось.

Комментарии:

1. Разделитель не является пустым. Строка темы может быть пустой

2. Чувак, никто не говорил, что разделитель не был пустым.

Ответ №3:

Пожалуйста, попробуйте это.

 implode(",", $aList);
 

Это функция разделения в PHP.
str-split
spliti

Комментарии:

1. implode() не разбивает строку