#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.php2. Любое разделение или разнесение вернет 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:
Комментарии:
1. implode() не разбивает строку