Например, я хотел бы создать массив из элементов в этой строке:
$str = 'red, green, blue ,orange';
Я знаю, что вы можете взорваться и пройти через них и обрезать:
$arr = explode(',', $str);
foreach ($arr as $value) {
$new_arr[] = trim($value);
}
Но я чувствую, что есть однострочный подход, который может справиться с этим. Любые идеи?
php
explode
trim
higher-order-functions
SeanWM
источник
источник
Улучшенный ответ
Результат:
это
источник
red
на*red*
. Лучшим может быть / (\ s *, \ s *) + /Следующее также учитывает пробелы в начале / конце входной строки:
и это минимальный тест с пробелами в каждой разумной позиции:
источник
array_map
решения regexp дают одинаковые результаты, кто-нибудь может сравнить их производительность?это как заменить и взорвать в одной строке кода
будет выводить результаты как
источник
Объединив некоторые принципы в существующих ответах, я придумал
Причиной этого является то, что в этом ответе я обнаружил ошибку, в которой, если в конце строки есть запятая, он вернет пустой элемент в массиве. т.е.
Результаты в
Вы можете исправить это, используя PREG_SPLIT_NO_EMPTY, как указано в этом ответе, чтобы удалить его, но как только вы это сделаете, технически нет необходимости удалять последовательные запятые через регулярное выражение, таким образом, сокращенное выражение
источник
Вы также можете сделать это с помощью регулярного выражения в одну строку
источник
попробуй это:
источник
preg_replace()
не генерирует массив из строки. Это правильный ответ на неправильный вопрос. Downvoted.$list = preg_split("/\s*,\s*/", 'red, green, blue ,orange');
небольшая модификация реабилитирует ответСпециально для образца строки OP, поскольку каждая подстрока, которая должна быть сопоставлена, является одним словом, вы можете использовать str_word_count () .
Код: ( Демо )
Вывод:
Это также может быть адаптировано для подстрок за пределами букв (и некоторых дефисов и апострофов - если вы читаете мелкий шрифт), добавляя необходимые символы в маску символов / третий параметр.
Код: ( Демо )
Вывод:
Опять же, я рассматриваю этот вопрос очень узко из-за образца строки, но это даст тот же желаемый результат:
Код: ( Демо )
источник
Вы можете использовать preg_split () для этого.
источник
источник
\t\n\r\0\x0B
также урезает$ str = 'красный, зеленый, синий, оранжевый';
$ str = trim ($ str);
$ strArray = explode (',', $ str);
print_r ($ strArray);
источник