Как я могу взорвать и обрезать пробелы? - программирование
Подтвердить что ты не робот

Как я могу взорвать и обрезать пробелы?

Например, я хотел бы создать массив из элементов в этой строке:

$str = 'red,     green,     blue ,orange';

Я знаю, что вы можете взорваться и пройти через них и обрезать:

$arr = explode(',', $str);
foreach ($arr as $value) {
    $new_arr[] = trim($value);
}

Но я чувствую, что есть однострочный подход, который может справиться с этим. Любые идеи?

4b9b3361

Ответ 1

Вы можете сделать следующее с помощью array_map:

$new_arr = array_map('trim', explode(',', $str));

Ответ 2

Улучшенный ответ

preg_split ('/(\s*,*\s*)*,+(\s*,*\s*)*/', 'red,     green thing ,,  ,,   blue ,orange');

Результат:

Array
(
    [0] => red
    [1] => green thing
    [2] => blue
    [3] => orange
)

это

  • Разделяет только запятые
  • Обрезает пробелы от каждого элемента.
  • Игнорирует пустые предметы
  • Не разбивает элемент с внутренними пробелами, как "зеленая вещь"

Ответ 3

Следующее также заботится о белых пробелах в начале/конце входной строки:

$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);

Ответ 4

Объединив некоторые принципы в существующих ответах, я придумал

preg_split ('/\s*,+\s*/', 'red,     green thing ,,  ,,   blue ,orange', NULL, PREG_SPLIT_NO_EMPTY);

Причина заключается в том, что я обнаружил ошибку в этом ответе, где, если в конце строки есть запятая, он вернет пустой элемент в массиве. т.е.

preg_split ('/(\s*,*\s*)*,+(\s*,*\s*)*/', 'red,     green thing ,,  ,,   blue ,orange,');

Результаты в

Array
(
  [0] => red
  [1] => green thing
  [2] => blue
  [3] => orange
  [4] => ''
)

Вы можете исправить это, используя PREG_SPLIT_NO_EMPTY, как упомянуто в этом ответе, чтобы удалить его, но как только вы это сделаете, технически нет необходимости удалять последовательные запятые через регулярное выражение, Таким образом, сокращенное выражение

Ответ 5

Вы также можете сделать это с помощью однострочного регулярного выражения

preg_split('@(?:\s*,\s*|^\s*|\s*$)@', $str, NULL, PREG_SPLIT_NO_EMPTY);

Ответ 6

попробуйте следующее:

$str = preg_replace("/\s*,\s*/", ",", 'red,     green,     blue ,orange');

Ответ 7

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');

Ответ 8

Вы можете использовать preg_split() для этого.

$bar = preg_split ('/[,\s]+/', $str);
print_r ($bar);

/* Result:
  Array
  (
      [0] => red
      [1] => green
      [2] => blue
      [3] => orange
  )
 */

Ответ 9

$str = str_replace(" ","", $str);

Ответ 10

обрезать и взорвать

$str = 'красный, зеленый, синий, оранжевый';

$str = trim ($ str);

$strArray = explode (',', $str);

print_r ($ strArray);