私は出力としてビデオストリームを返すPHPスクリプトを持っています。出力には複数の一意のストリームが含まれます。複数のforeachループからのjson出力を結合する
私は、JSONへの出力をエンコードしようとしていますが、理由は、複数のforeachループのそのは
コード適切な出力を与えていない:上記のコード
<?php
if (isset($_GET["id"]))
$id = $_GET["id"];
$temp = explode("=",$id);
$link=end($temp);
parse_str(file_get_contents('http://www.youtube.com/get_video_info?video_id='.$link), $video_data);
$streams = $video_data['url_encoded_fmt_stream_map'];
$streams = explode(',',$streams);
$arr = array();
foreach ($streams as $streamdata) {
parse_str($streamdata,$streamdata);
foreach ($streamdata as $key => $value) {
$myObj->$key = $value;
}
$arr = $myObj;
}
echo json_encode(array("streams"=>$arr));
?>
が出力から最後のストリーム/アイテムを返します。
出力:
{
"streams":{
"quality":"small",
"type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"",
"itag":"17",
"url":"video_link"
}
}
私は、上のforeachループ内echo json_encode(array("streams"=>$arr));
を置く場合。 複数のルートノードを持つすべてのストリームが返され、受け入れられません。 すべての蒸気を含むルートノードが1つだけ必要です。
出力:
{
"streams":{
"type":"video\/mp4; codecs=\"avc1.64001F, mp4a.40.2\"",
"itag":"22",
"url":"video_link",
"quality":"hd720"
}
}{
"streams":{
"type":"video\/webm; codecs=\"vp8.0, vorbis\"",
"itag":"43",
"url":"video_link",
"quality":"medium"
}
}{
"streams":{
"type":"video\/mp4; codecs=\"avc1.42001E, mp4a.40.2\"",
"itag":"18",
"url":"video_link",
"quality":"medium"
}
}{
"streams":{
"type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"",
"itag":"36",
"url":"video_link",
"quality":"small"
}
}{
"streams":{
"type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\"",
"itag":"17",
"url":"video_link",
"quality":"small"
}
}
所望の出力は次のようになります。
{
"streams":[
{
"quality":"hd720",
"itag":"44",
"url":"video_link",
"type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\""
},
{
"quality":"medium",
"itag":"",
"url":"video_link",
"type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\""
},
{
"quality":"medium",
"itag":"17",
"url":"video_link",
"type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\""
},
{
"quality":"medium",
"itag":"17",
"url":"video_link",
"type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\""
},
{
"quality":"small",
"itag":"17",
"url":"video_link",
"type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\""
},
{
"quality":"small",
"itag":"17",
"url":"video_link",
"type":"video\/3gpp; codecs=\"mp4v.20.3, mp4a.40.2\""
}
]
}
は、複数のルートノードをコーミングする方法はありますかすべてのストリームをJSON出力を得ます。
注:
- 外foreachループの反復するスクリプト寿命の5倍
- インナーforeachループの反復するスクリプト寿命の各外側のforeachループ4回
としてこれで私を助けてください私はPHPに新しいです。 TIA !!!
ご希望の出力の例を教えてください。 answerで提供された出力に無効なJSONデータが含まれています。あなたが望む出力、またはあなたのコードによって現在生成されている出力(望まないもの)として言及しているかどうかは不明です – Nima
'$ video_data'と所望の出力。 –
@Nima @N Moeini私は質問をediedし、望ましい出力を追加しました。 URLの値は異なります。 – xamDev