2012-02-11 1 views
2

구분 기호로 구분 된 값의 문자열을 가지고 있으며 문자열의 각 값에 대해 some_func를 수행해야합니다. 가장 작고 우아한 방법은 무엇입니까? 현재 사용하고있는 코드는 다음과 같습니다.우아한 방법은 무엇입니까 : explode -> some_func 적용 -> foreach없이 implode?

$delim = ','; 
$source_array = explode($delim, $source_string); 

$destination_array = array(); 
foreach ($source_array as $val) { 
    $destination_array[] = some_function($val); 
} 
$destination_string = implode($delim, $destination_array); 

주문은 중요하지 않지만 보존하는 것이 좋습니다.

감사합니다.

+0

왜 사람들은 이것을 downvote 했습니까? – afuzzyllama

+0

그는 배우려고하기 때문에, 당신이 아는 것은 나쁘다. – AlfredoVR

답변

5

당신은 array_map 찾고 :

$delim = ','; 
$source_array = explode($delim, $source_string); 
$destination_array = array_map('some_function', source_array) 
$destination_string = implode($delim, $destination_array); 
+0

또는 한 줄에 : array_map에 대한 –

+0

+1 –

+0

고마워요! "$ dest = implode (", "array_map ("some_function ", explode (", ", $ 소스))); explode-then-implode의 순서를 피하는 지름길 기능이없는 것 같습니다. ... 나는 array_map을 사용하는 것으로 알고 있어야만합니다. 팁을 고맙게 생각합니다. – BuyTheBid

0

정규 표현식/REGEX를 사용해보십시오. 또는 알고리즘이 무거 우면 Perl에서 스크립트를 만들어이 모든 것을 처리하고 PHP에서 호출하십시오. 그것은 쉽게 일을 할 것입니다.

글쎄, 누군가가 파이썬이나 다른 스크립팅 언어를 말할 것입니다. 그러나 그것은 2 센트입니다.

+0

-1 regexp 또는 대체 프로그래밍 언어의 sledghammer 접근법을 추천하면 OP가 언어 선택을 자신의 문제에 대한 해결책을 제공 할 때 정말 좋은 대답은 아닙니다. –

+1

이제 나는 가서 망치를보아야한다. – AlfredoVR

0

array_walk을 사용할 수 있습니다. 이 방법을 사용하면 배열의 각 항목에 함수를 적용 할 수 있습니다. (

$delim = ','; 
$parts = explode($delim, $source_string); 
array_walk($parts, 'some_function'); 
$destination_string = implode($delim, $parts); 

array_map에 비해, 그것은 기존의 배열에 새로운 배열하지만 작업을 생성하지 않습니다 ...하지만 그것은 단지 당신이 큰 배열 작업하는 경우 중요 할 것 : 그래서 당신의 코드는 다음과 같을 것이다 생각하는 기억). 그리고 다른 배열 값에 액세스해야한다면 물론 작동하지 않을 것입니다 ...

관련 문제