15

サンプル コードで最初の文字列の末尾にまだスペースがあるのはなぜですか?

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

文字列(12) "test_data_1" ​​文字列(11) "test_data_2"

4

3 に答える 3

53

まず、array_walk は目的に対してまったく間違った関数です。

次に、array_map は元の配列を変更しませんが、マップされた配列を返します。したがって、必要なものは次のとおりです。

$a = array_map('trim', $a);
于 2013-02-12T08:59:03.787 に答える
4

配列内のアイテム (値) を変更するには、コールバックは参照によって最初のパラメーターを受け取り、それarray_walkを変更する関数でなければなりません (これは plain の場合ではありません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);
}
于 2016-06-24T08:53:22.630 に答える
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);
}
于 2013-02-12T08:58:41.697 に答える