답변:
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
)
이
red
되었습니다 *red*
.로 바꾸십시오 . 더 좋은 방법은 / (\ s *, \ s *) + /
다음은 또한 입력 문자열의 시작 / 끝에서 공백을 처리합니다.
$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);
array_map
정규 표현식 솔루션은 동일한 결과를 생성하고, 사람이 자신의 성능을 비교할 수?
기존 답변에 교장 중 일부를 결합하여
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 를 사용 하여이 문제 를 제거 하여 해결할 수 있지만 일단 수행하면 기술적으로 정규식을 통해 연속적인 쉼표를 제거 할 필요가 없으므로 표현이 단축됩니다.
이 시도:
$str = preg_replace("/\s*,\s*/", ",", 'red, green, blue ,orange');
preg_replace()
문자열에서 배열을 생성하지 않습니다. 이것은 잘못된 질문에 대한 정답입니다. 공감.
$list = preg_split("/\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);
\t\n\r\0\x0B
도