0
{ 
    "ServiceCurrentlyPlaying": {
        "fn": "Slideshow-41958.mp4",
        "apps": {
            "ServiceCurrentlyPlaying": {
                "state": "stopped"
            }
        }
    }
}

配列から ServiceCurrentlyPlaying という名前のものをどのように分割しますか? (からjson_decode(file, TRUE))これはおそらくそれを知っている人にとっては簡単な質問ですが、各配列を別の空の配列に手動でハードコーディングすることを含まないことをしようとしています(多くのforeach ($outer as $inner)ように私がやっていることですが入れ子の量が異なるため問題があります)

注: 入れ子のレベル、量、構造が異なる約 41958 個のファイルを処理する必要があるため、..

私が望む結果は次のとおりです。

{
    "fn": "Slideshow-41958.mp4",
    "apps": {
    "state": "stopped"
    }
}

ありがとうございました。

4

2 に答える 2

0

あまり最適化されていないかもしれませんが、これがアイデアです。

$data = json_decode('{ "ServiceCurrentlyPlaying": { "fn": "Slideshow-41958.mp4", "apps": { "ServiceCurrentlyPlaying": { "state": "stopped" } } } }', true);
$modifiedData = breakArray($data);

function breakArray($arr) {
  if(is_array($arr) && sizeof($arr)>0) {
    $buffer = array();

    foreach($arr as $key=>$value) {
      if($key==="ServiceCurrentlyPlaying") {
        if(is_array($value)) $buffer = array_merge($buffer, breakArray($value));
      } else {
        $buffer[$key] = (is_array($value) ? breakArray($value) : $value);
      }
    }

    return $buffer;
  } else {
    return $arr;
  }
}
于 2012-10-25T05:20:48.740 に答える
0

使用する

 $array=json_decode($jsondata);
    $i=0;
    foreach($array as $key=>$arr)
    {
     $out[$i]['fn']=$arr['fn'];
    $out[$i]['apps]=$arr['apps']['ServiceCurrentlyPlaying']

    $i++;
    }
于 2012-10-25T04:47:52.977 に答える