我正在研究需要使用空格str_replace冒号的代码。因为我不知道我的数组有多深,所以我必须使用array_walk_recursive函数。问题是str_replace没有被带入帐户(读取不起作用)。请帮帮我们。
这是我的代码
public function removeColonsFromStrings(array $inputs) {
d($inputs); // some dump function
array_walk_recursive($inputs, function (&$item, $key) {
$inputs[$key] = str_replace(':',' ', $item);
});
dd($inputs); //dump and die function
return $inputs;
}
,输出正在跟随
// first d() output
array(7) {
["GivenName"]=>
string(5) "Me"
["FamilyName"]=>
string(7) "Me"
["DisplayName"]=>
string(19) "[id:: 68]"
["CompanyName"]=>
string(19) "[id:: 68]"
["FullyQualifiedName"]=>
string(0) ""
["PrimaryPhone"]=>
array(1) {
["FreeFormNumber"]=>
string(0) ""
}
["PrimaryEmailAddr"]=>
array(1) {
["Address"]=>
string(24) "my@email.com"
}
}
// Second dd() output
array(7) {
["GivenName"]=>
string(5) "Me"
["FamilyName"]=>
string(7) "Me"
["DisplayName"]=>
string(19) "[id:: 68]"
["CompanyName"]=>
string(19) "[id:: 68]"
["FullyQualifiedName"]=>
string(0) ""
["PrimaryPhone"]=>
array(1) {
["FreeFormNumber"]=>
string(0) ""
}
["PrimaryEmailAddr"]=>
array(1) {
["Address"]=>
string(24) "my@email.com"
}
}
那么如何正确更新数组中的值?如果您需要任何其他信息,请告诉我,我会提供。谢谢!
答案 0 :(得分:1)
发送参考时,您需要覆盖旧值。
array_walk_recursive($inputs, function (&$item, $key) {
$item = str_replace(':',' ', $item);
});
答案 1 :(得分:1)
您正在通过引用(&
)修改叶节点值,因此您可以使用values变量(函数调用中的第一个参数)覆盖值,因此无需将键标识为第二个函数调用中的变量/参数。
测试/证明:(Demo)
$inputs=['a:','b:',['c:'],'d:'];
array_walk_recursive($inputs,function(&$v){
$v=str_replace(':',' ',$v);
}
);
var_export($inputs);
输出:
array (
0 => 'a ',
1 => 'b ',
2 =>
array (
0 => 'c ',
),
3 => 'd ',
)
在其他情况下,有时调用use(&$outputvariable)
以允许在函数之外/之外访问内部生成的数据。但是,这不会像array_walk_recursive()
那样有效,因为key
将是“深度无知”。请将此效果视为c
(key = [2] [0])覆盖a
(key = [0])
代码:
$inputs=['a:','b:',['c:'],'d:'];
array_walk_recursive($inputs,function($v,$k)use(&$result){
$result[$k]=str_replace(':',' ',$v);
});
var_export($result);
输出:
array (
0 => 'c ',
1 => 'b ',
3 => 'd ',
)
答案 2 :(得分:0)
您需要调整$item
而不是$inputs[$key]
。