サンプル コードで最初の文字列の末尾にまだスペースがあるのはなぜですか?
$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"
サンプル コードで最初の文字列の末尾にまだスペースがあるのはなぜですか?
$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"
まず、array_walk は目的に対してまったく間違った関数です。
次に、array_map は元の配列を変更しませんが、マップされた配列を返します。したがって、必要なものは次のとおりです。
$a = array_map('trim', $a);
配列内のアイテム (値) を変更するには、コールバックは参照によって最初のパラメーターを受け取り、それ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);
}
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);
}