2016-04-05 17 views
3

私のプロジェクトには非公式のIMDb APIを使用しようとしています。私はこのコードを使用しました。入れ子配列のPHP foreachループ

<form name="search-imdb" autocomplete="off" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
<input type="text" name="q" title="Type Name, Title, Character etc and hit Enter" placeholder="Type Name, Title, Character etc and hit Enter" size="50" /> 
<input type="submit" name="submit" title="Click to Fetch Data from IMDb" value="Search IMDb" /> 
</form> 

<?php 

if (isset($_POST['submit'])){ 
    $user_search = $_POST['q']; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, "imdb.wemakesites.net/api/search?q=".$user_search); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $output = curl_exec($ch); 
    $array = json_decode($output, true); 
    print_r($array); 

    foreach ($array as $key => $data){ 
    if(is_array($data)){ 
     foreach($data as $subkey => $results){ 
      if(is_array($results)){ 
       foreach($results as $key => $titles){ 
        echo $titles."<br />"; 
       } 
      } else { 
       echo $results."<br />"; 
      } 
     } 
    } else { 
     echo $data."<br />"; 
    } 
} 
    curl_close($ch); 
} else { 

} 
?> 

私は「タイトル」、配列の値を取得する必要があります。 (タイトル、ID、URL)これはJSONコードでした。

Array{ 
"status": "success", 
"code": 200, 
"message": "ok", 
"term": "jQuery21409989625962002346_1459839763205&q", 
"search_url":"http://www.imdb.com/find?q=batmansuperman&s=all5703b359add1b", 
"data": { 
    "results": { 
     "titles": [ 
      { 
       "title": "Batman", 
       "id": "tt0096895", 
       "url":"http://www.imdb.com/title/tt0096895/" 
      }, 
      { 
       "title": "Batman", 
       "id": "tt0059968", 
       "url":"http://www.imdb.com/title/tt0059968/" 
      }, 
      { 
       "title" :"Batman v Superman: Dawn of Justice", 
       "id": "tt2975590", 
       "url":"http://www.imdb.com/title/tt2975590/" 
      }, 
      { 
       "title": "Batman Begins", 
       "id": "tt0372784", 
       "url":"http://www.imdb.com/title/tt0372784/ 
      } 
     ] 
    } 
} 

これはJSONデコード後の$ arrayです。

Array ([status] => success [code] => 200 [message] => ok [term] => megamind [search_url] => http://www.imdb.com/find?q=megamind&s=all5703f4f88841f [data] => Array ([results] => Array ([titles] => Array ([0] => Array ([title] => Megamind [id] => tt1001526 [url] => http://www.imdb.com/title/tt1001526/?ref_=fn_al_tt_1) [1] => Array ([title] => Megamind [id] => tt1785464 [url] => http://www.imdb.com/title/tt1785464/?ref_=fn_al_tt_2) [2] => Array ([title] => MegaMind [id] => tt1890468 [url] => http://www.imdb.com/title/tt1890468/?ref_=fn_al_tt_3) [3] => Array ([title] => Mega Mindy [id] => tt0891395 [url] => http://www.imdb.com/title/tt0891395/?ref_=fn_al_tt_4) [4] => Array ([title] => Megamind [id] => tt3022564 [url] => http://www.imdb.com/title/tt3022564/?ref_=fn_al_tt_5) [5] => Array ([title] => Megamind: The Button of Doom [id] => tt1847645 [url] => http://www.imdb.com/title/tt1847645/?ref_=fn_al_tt_6) [6] => Array ([title] => Megamind [id] => tt3624292 [url] => http://www.imdb.com/title/tt3624292/?ref_=fn_al_tt_7) [7] => Array ([title] => Megamind [id] => tt2173285 [url] => http://www.imdb.com/title/tt2173285/?ref_=fn_al_tt_8) [8] => Array ([title] => Mega Mindy Versus ROX [id] => tt4706602 [url] => http://www.imdb.com/title/tt4706602/?ref_=fn_al_tt_9) [9] => Array ([title] => Aa Megamisama [id] => tt0872301 [url] => http://www.imdb.com/title/tt0872301/?ref_=fn_al_tt_10)) [characters] => Array ([0] => Array ([title] => Megamind [id] => ch0194198 [url] => http://www.imdb.com/character/ch0194198/?ref_=fn_al_ch_1) [1] => Array ([title] => Megamind's Mother [id] => ch0229958 [url] => http://www.imdb.com/character/ch0229958/?ref_=fn_al_ch_2) [2] => Array ([title] => Megamind's Father [id] => ch0229956 [url] => http://www.imdb.com/character/ch0229956/?ref_=fn_al_ch_3)) [names] => Array ([0] => Array ([title] => Megamind [id] => nm6292338 [url] => http://www.imdb.com/name/nm6292338/?ref_=fn_al_nm_1)) [keywords] => Array ([0] => Array ([title] => megami [id] => megami [url] => http://www.imdb.com/keyword/megami/?ref_=fn_al_kw_1)) [companies] => Array ([0] => Array ([title] => Megami [id] => co0544394 [url] => http://www.imdb.com/company/co0544394/?ref_=fn_al_co_1) [1] => Array ([title] => Mega Mind Media [id] => co0558438 [url] => http://www.imdb.com/company/co0558438/?ref_=fn_al_co_2) [2] => Array ([title] => Elm Tree Gaming [id] => co0202064 [url] => http://www.imdb.com/company/co0202064/?ref_=fn_al_co_3))))) 

誰でも私がここで間違っていることを教えてもらえますか?私はこのエラーを受けています - "文字列変換への配列"

私はこれを数時間解決しようとしましたが、私はインターネット上で答えを探してきました。いくつかの助けは非常に高く評価されます。ありがとう。

+0

何を正確にあなたがここに印刷したいですか?それもどの形式ですか?最初に指定してください。 –

+0

この種のデータには、画像の代わりにテキストを使用して、人々が簡単に閲覧して作業できるようにする必要があります。 [あなたのデータはJSONのようですが、 'json_decode($ data、true); 'を使って配列に入れます。](http://php.net/manual/en/function.json-decode.php) – Prix

+0

まず第一に... arrayという名前の配列はDogという名前の犬のようなものです。あなたの配列に意味のある名前を見つけてください。 –

答えて

4

私の見ていることから、これはjsonのようであり、配列ではないようです。その場合は、最初にこれを実行する必要があります。このことができます

foreach($array['data']['results']['titles'] as $data) { 
    echo "Title:".$data['title']; 
    echo "<br/>"; 
    echo "ID:".$data['id']; 
    echo "<br/>"; 
    echo "URL:".$data['url']; 
    echo "<hr/>"; 
} 

希望:それは、配列トラバーサルになると

$array = json_decode($array, true); 

は、あなたがこのような何かを試すことができます。

+2

soooooooありがとうございます:)ありがとうトン。出来た。 –

2

それはあなたがjson_decodeしようとしているJSONデータ、dataresultsだと仮定すると、titlesは、配列のキーではありません、彼らは、オブジェクトのプロパティです。 $array->data->results->titles[0];のようなものを試してみてください。 {はオブジェクトプロパティを表し、[は配列を表します。

2

使用

$json_array = json_encode($array['data']['results']['titles']); 
    print_r($json_array);