2017-10-23 11 views
3

配列の値を変更したいと思います。私は検索語(例えば「AAA」)とそれのための新しい名前(。例えば、「テスト」)を宣言しstr_replace経由でJSON配列の値を変更できません

Array 
(
    [0] => Array 
     (
      [name] => aaa   
     ) 

    [1] => Array 
     (
      [name] => bbb    
     ) 

    [2] => Array 
     (
      [name] => ccc 
     ) 
) 

:ここに私の出発配列です。そして私よりも実際にそれを変更するには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

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

アウト置く:ここでは、テストおよびBBBに置き換えAAA idがanother_test

Array 
(
    [0] => Array 
     (
      [name] => test 
     ) 

    [1] => Array 
     (
      [name] => another_test 
     ) 

    [2] => Array 
     (
      [name] => ccc 
     ) 

) 
に置き換えられます
関連する問題