我想更改数组中的值。这是我的首发阵容:
Array
(
[0] => Array
(
[name] => aaa
)
[1] => Array
(
[name] => bbb
)
[2] => Array
(
[name] => ccc
)
)
我声明了一个searchterm(例如“aaa”)和一个新名称(例如“test”)。而且我做了str_replace
来实际改变它。
不幸的是,没有任何变化,也没有收到错误信息。你能帮忙告诉我我的错误在哪里吗?
for ($i=0; $i < count($json) ; $i++) {
$search = $old_name;
$replace = $new_name;
str_replace($search, $replace, $json[$i]['name']);
print_r($json);
}
答案 0 :(得分:3)
str_replace
返回一个字符串。我认为你试图使用它,好像它改变了一个通过引用传递的参数。相反,您应该以正确的索引将返回的值分配给数组。
for ($i=0; $i < count($json) ; $i++) {
$search = $old_name;
$replace = $new_name;
$json[$i]['name'] = str_replace($search, $replace, $json[$i]['name']);
print_r($json);
}
答案 1 :(得分:3)
正如documentation所说,此函数不会更新数组
此函数返回包含替换值的字符串或数组。
您需要使用返回值更新它:
for ($i=0; $i < count($json) ; $i++) {
$search = $old_name;
$replace = $new_name;
$json[$i]['name'] = str_replace($search, $replace, $json[$i]['name']);
print_r($json);
}
答案 2 :(得分:2)
如果您想要替换/更改多个名称,我建议您使用以下代码。
// define an array with keys as new name and value as old name ( name to be replaced).
$change_name_array= array('test'=>'aaa','another_test'=>'bbb');
// loop the array
for ($i=0; $i < count($json) ; $i++) {
// check if the name is in defined array
if(in_array($json[$i]['name'],$change_name_array)){
// get the key and replace it.
$json[$i]['name'] = array_search($json[$i]['name'], $change_name_array);
}
}
输出:这里aaa id替换为test,bbb替换为another_test
Array
(
[0] => Array
(
[name] => test
)
[1] => Array
(
[name] => another_test
)
[2] => Array
(
[name] => ccc
)
)