2013-02-12 6 views

답변

36

첫째, array_walk가 잘못 시도 당신의 목적을위한 기능.

둘째, array_map은 원래 배열을 변경하지 않지만 매핑 된 배열을 반환합니다. 그래서 당신이 필요로하는 무엇을 :

$a = array_map('trim', $a); 
+1

감사합니다. array_map이 돌아 오는 것을 놓치 셨습니다.하지만 pealse는 왜 array_walk를 잘못된 함수로 간략히 설명 할 수 있습니까? –

+8

[manual] (http://php.net/array-walk)을 읽으면 array_walk은 배열의 각 값 (및 키)이있는 ** 함수를 ** 호출 **합니다. 그래서 그것은 다음과 같은 결과를 가져올 것입니다 :'trim ('test_data_1', 0); trim ('test_data_2', 1)'- 할당이없고 부작용이 없다. 물론 array_walk에 대한 함수를 작성하여 실제 배열 요소를 잘라낼 수 있습니다. –

0

새로운 배열을 반환 array_map이

$a=array('test_data_1 ','test_data_2'); 
array_walk($a, 'trim'); 
$a = array_map('trim', $a); 
foreach($a AS $b){ 
    var_dump($b); 
} 
0

trim() 그것을 확인하거나 삽입하기 전에 데이터를 준비하는 것이 좋다. 당신은 아마 정돈하는 것 이상으로 준비하고 싶어 할 것입니다. 내가 전에 본 적이 멋진 기술은 당신의 준비 기능을 통해 "파이프"에 있습니다 :

$data = prepare($data, array(
    'first_name' => 'trim|custom_function', 
    'surname' => 'trim', 
)); 

이런 식으로 그 일의 아름다움은 코드를 쉽게 읽을 수 있으며 각각의 특정 배열 요소에 기능을 실행하는 데 매우 쉽습니다. 콜백 참조로 첫 번째 매개 변수를 사용하고 수정하는 기능을해야 배열의 항목 (값을) 수정 array_walk를 들어

function prepare($data, $arr){ 
    foreach($arr as $input_name => $functions){ 
    foreach(explode('|', $functions) as $function){ 
     $data[$input_name] = call_user_func($function, $data[$input_name]); 
    } 
    } 
    return $data; 
} 
+4

이봐, 죄송 합니다만 대답은 위의 질문과 관련이 없습니다. –

+0

@ JaakKütt 예. 그러나 배열 값을 다듬는 것은 데이터 준비를위한 것입니다. 때로는 개발자가 목표로하는 것에보다 유연한 접근 방식을 제안하는 것이 도움이됩니다. – rybo111

3

: 여기

는 내가 빨리 기절 한 기능입니다 (일반 trim의 경우하지 않은), 그래서 당신의 코드가 될 것이다 : 또는

$a=array('test_data_1 ','test_data_2'); 
array_walk($a, function (&$value) { $value = trim($value); }); // by-reference modification 
// (no array_map) 
foreach($a AS $b){ 
    var_dump($b); 
} 

, 당신은 반환 값으로 배열을 다시 할당해야합니다 array_map와 함께, 그래서 당신의 코드가 될 것이다 :

$a=array('test_data_1 ','test_data_2'); 
// (no array_walk) 
$a = array_map('trim', $a); // array reassignment 
foreach($a AS $b){ 
    var_dump($b); 
}