Например, я хотел бы создать массив из элементов в этой строке:
$str = 'red, green, blue ,orange';
Я знаю, что вы можете взорваться и пройти через них и обрезать:
$arr = explode(',', $str); foreach ($arr as $value) { $new_arr[] = trim($value); }
Но я чувствую, что есть один подход, который может справиться с этим. Есть идеи?
Вы можете сделать следующее с помощью array_map :
$new_arr = array_map('trim', explode(',', $str));
Улучшенный ответ
preg_split ('/[\s*,\s*]*,+[\s*,\s*]*/', 'red, green thing ,, ,, blue ,orange');
Результат:
Array ( [0] => red [1] => green thing [2] => blue [3] => orange )
Эта
Следующее также заботится о белых пробелах в начале / конце входной строки:
$new_arr = preg_split('/\s*,\s*/', trim($str));
и это минимальный тест с пробелами в каждом разумном положении:
$str = ' first , second , third , fourth, fifth '; $new_arr = preg_split('/\s*,\s*/', trim($str)); var_export($str);
Вы также можете сделать это с помощью однострочного регулярного выражения
preg_split('@(?:\s*,\s*|^\s*|\s*$)@', $str, NULL, PREG_SPLIT_NO_EMPTY);
попробуй это:
$str = preg_replace("/\s*,\s*/", ",", 'red, green, blue ,orange');
SPECIFICALLY для строки примера OP, поскольку каждая подстрока, которая должна быть сопоставлена, представляет собой одно слово, вы можете использовать str_word_count () .
Код: ( Демо )
$str = ' red, green, blue ,orange '; var_export(str_word_count($str,1)); // 1 means return all words in an indexed array
Вывод:
array ( 0 => 'red', 1 => 'green', 2 => 'blue', 3 => 'orange', )
Это также можно адаптировать для подстрок над буквами (а некоторые дефисы и апострофы – если вы читаете мелкий шрифт), добавив необходимые символы в маску символов / третий параметр.
Код: ( Демо )
$str = " , Number1 , 234, 0 ,4heaven's-sake , "; var_export(str_word_count($str,1,'0..9'));
Вывод:
array ( 0 => 'Number1', 1 => '234', 2 => '0', 3 => '4heaven\'s-sake', )
Опять же, я рассматриваю этот вопрос очень узко из-за образца строки, но это даст тот же желаемый результат:
Код: ( Демо )
$str = ' red, green, blue ,orange '; var_export(preg_match_all('/[^, ]+/',$str,$out)?$out[0]:'fail');
Вы можете использовать preg_split () для этого.
$bar = preg_split ('/[,\s]+/', $str); print_r ($bar); /* Result: Array ( [0] => red [1] => green [2] => blue [3] => orange ) */
$str = str_replace(" ","", $str);
обрезать и взорвать
$ str = 'красный, зеленый, синий, оранжевый';
$ str = trim ($ str);
$ strArray = explode (',', $ str);
print_r ($ strArray);