0

JSON 文字列があるとします。

$json = '{"lemon":"test",
          "orange":["toto", "tata", "tete"],
          "zob":[{"id":"0"}, {"id":"1"}]}';

そのエンコードされたオブジェクトを循環して、その中のすべての文字列を変更したいので、再帰関数があります。

function doObject($__obj){
  $__obj = cycleObject($__obj);
  return $__obj;
}

function cycleObject($__obj){
  $type = gettype($__obj);
  foreach($__obj as $var => &$val){
    switch(gettype($val)){
      case 'object':
      cycleObject($val);
      break;

      case 'array':
      cycleObject($val);
      break;

      case 'string':
      if($type == 'object'){
        $__obj->$var = $val.'-ok';
      }else{
        if($type == 'array'){
          $__obj[$var] = $val.'-ok';
        }
      }
      break;
    }
  }
  return $__obj;
}

そして、私は関数を呼び出します:

$obj = doObject(json_decode($json));
var_dump($obj);

与える:

object(stdClass)#1 (3) {
    ["lemon"]=> string(7) "test-ok"
    ["orange"]=> array(3) {
        [0]=> string(4) "toto"
        [1]=> string(4) "tata"
        [2]=> string(4) "tete" }
    ["zob"]=> array(2) {
        [0]=> object(stdClass)#2 (1) {
            ["id"]=> string(4) "0-ok" }
        [1]=> object(stdClass)#3 (1) {
            ["id"]=> string(4) "1-ok" }
    }
}

今私の問題は、何らかの理由で、文字列で構成される配列内で直接変更できないことです。つまり、配列が参照を失うため、配列内の変更された文字列 (配列内のオブジェクト内ではなく) を変更することはできません。どうすれば修正できるので、orange代わりに次を取得します。

[0]=> string(7) "toto-ok"
[1]=> string(7) "tata-ok"
[2]=> string(7) "tete-ok"
4

1 に答える 1