2013-02-12 6 views

答えて

36

まず、あるarray_walkが間違っているしてみてくださいあなたの目的のために機能します。

第2に、array_mapは元の配列を変更せず、マップされた配列を返します。だから、何が必要です:

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

ありがとう、array_mapが返ってきたものが間違っていましたが、どうしてあなたは誤った関数としてarray_walkを簡略化したいのですか? –

+8

[manual](http://php.net/array-walk)を読んだら、array_walkは配列の各値(とキー)を持つ関数を**呼び出し**するだけです。だから、 'trim( 'test_data_1'、0);と同じ効果があります。 trim( 'test_data_2'、1) ' - 代入なし、副作用なし(そして、間違った2番目のパラメータをトリムする方法です)。 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); 
}