无法通过str_replace更改JSON数组中的值

时间:2017-10-23 16:09:24

标签: php json

我想更改数组中的值。这是我的首发阵容:

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);     
}

3 个答案:

答案 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
        )

)