Как я могу взорвать и обрезать пробелы?
Например, я хотел бы создать массив из элементов в этой строке:
$str = 'red, green, blue ,orange';
Я знаю, что вы можете взорваться, прокрутить их и обрезать:
$arr = explode(',', $str);
foreach ($arr as $value) {
$new_arr[] = trim($value);
}
Но я чувствую, что есть однолинейный подход, который может справиться с этим. Есть какие-нибудь идеи?
9 answers
Вы можете сделать следующее с помощью массив_мап:
$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');
В частности, для примерной строки 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',
)
Это также можно адаптировать для подстрок, выходящих за рамки букв (и некоторых дефисов и апострофов - если вы читаете мелкий шрифт), добавив необходимые символы в маску символов /3-й параметр.
Код: (Демонстрационная версия)
$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 = обрезка($str);
$strArray = взорваться(',',$str);
Print_r($strArray);