2016-12-22 14 views
3

모든 배열 값을 다듬기 위해 array_map을 사용하고 있지만 세 번째 매개 변수를 전달할 필요가 있기 때문에 제 3의 매개 변수를 전달해야합니다. 기본적으로 공백 문자, 작은 따옴표 및 큰 따옴표의 모든 배열 값을 자르고 싶습니다.PHP array_map trim + parameters

가 나는 기능을 생성하는 유틸리티 클래스를 가지고 있으며 그것은 다음과 같습니다

public function convertToArray($string, $trim = false) { 
    $split = explode(",", $string); 

    if($trim) { 
     $split = array_map("trim", $split, array(" '\"")); 
    } 

    return $split; 
} 

은 어떻게 든 그래도 난이 일을 할 수 없습니다. the answer here을 따라 갔지만 결과에 큰 따옴표가 계속 표시됩니다.

이 난
if($trim) { 
    $split = array_map("trim", $split); 
    $split = array_map("trim", $split, array("'")); 
    $split = array_map("trim", $split, array('"')); 
} 

을 시도하지만, 난 여전히 같은 결과를 얻을.

+0

---이 SO 질문에 [언급 한 바와 같이 당신의 문자열을 따옴표 안에 분리 문자가 포함 된 경우 오히려 explode''보다'str_getcsv'를 사용하는 것이 좋습니다 ] (http://stackoverflow.com/questions/5132533/php-how-can-i-explode-a-string-by-commas-but-not-wheres-the-commas-are-within). –

답변

11

array_map은 단 하나의 매개 변수를 취하는 함수를 사용합니다. 기본과 다를 이후의 매개 변수 trim()으로 배열을 매핑하려면, 당신은 익명 함수로 포장해야합니다 : 당신이 그것에 대해 익명 함수를 사용해야합니다 생각

$split = array_map(function($item) { 
    return trim($item, ' \'"'); 
}, $split); 
+0

'trim'의 두 번째 매개 변수를 작은 따옴표로 변경 한 이유가 있습니까? –

+1

그냥 내 개인 취향. 그들은 모든 것을 문자 그대로 취급하고 변수를 구문 분석하지 않기 때문에 큰 따옴표보다 작은 따옴표를 선호합니다. 이 경우에는 차이가 나지 않으므로 어쨌든 백 슬래시로 문자 중 하나를 벗어나야합니다. –

2

:

$split = array_map(function ($value) { 
    return trim($value, " '\""); 
}, $split); 

다른 답변과 정확히 같았 기 때문에 다음은 대안입니다.)에서 (

function trim_spaces_and_quotes($value) { 
    return trim($value, " '\""); 
} 

$split = array_map('trim_spaces_and_quotes', $split); 
0

나는 array_walk를 사용하는 것, 당신은 단지 기존의 기본 설정에 추가 문자를 추가해야합니다,이 방법은 이것이 당신이 많은 다른 장소에서 필요 해요 작업 인 경우 유용 할 수 the docs) :

여기 온 사람들을위한 측면 노트에
array_walk($string_arr_to_trim, function (&$v) { 
    $v = trim($v, " \t\n\r\0\x0B'\""); 
});