Intereting Posts
хакеры добавили контент в мои файлы PHP Логика галереи изображений Laravel Я хочу загрузить файл и при загрузке файла значения файла должны быть помещены в мой массив Rowspan, если некоторый td содержит одинаковый идентификатор, используя данные jquery json Передача массива PHP во внешнюю функцию Javascript как массив .htaccess mod переписать автоматически с помощью php или что-то еще? Секция переопределения в шаблоне лезвия ларавеля, бросающая неопределенные переменные ошибки Динамически создавать и заполнять входное радио с помощью PHP Команды MySqli не синхронизированы; вы не можете запустить эту команду сейчас Как нажимать копию объекта в массив в PHP iconv () – как распознать оскорбительный характер? set-post-thumbnail wp-ajax return 0 домен php setcookie Почта Swiftmailer входит в папку SPAM. Что делает этот PHP (function / construct?) И где можно найти дополнительную документацию?

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

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

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