2016-04-05 20 views
3

Projem için gayri resmi bir IMDb API'si kullanmaya çalışıyorum. Bu kod parçasını kullandım.İç içe geçmiş dizide PHP foreach döngüsü

<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 { 

} 
?> 

Ben SADECE "başlıkları" dizinin değerlerini almak gerekir. (title, id, url) Bu, JSON koduydu.

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/ 
      } 
     ] 
    } 
} 

Ayrıca bu, JSON Kod Çözme işleminden sonraki $ dizimdir.

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

Burada yanlış yaptığımı kimse söyleyebilir mi? Bu hatayı alıyorum - "String Dönüştürme Dizisi"

Bunu birkaç saat boyunca çözmeyi denedim ve tüm internet üzerinden yanıt aradım. Bazı yardımlar çok takdir edilecektir. Teşekkürler.

+0

tam olarak ne burada yazdırmak istiyoruz? Hangi formatta? Lütfen önce bunu belirtin. –

+0

Bu tür veriler için resimler yerine metin kullanmalısınız, böylece insanlar size yardımcı olması için kolayca görüntüleyebilir ve bunlarla birlikte çalışabilir. [Ayrıca, verileriniz JSON gibi görünüyor, daha sonra json_decode ($ data, true); 'diziye yerleştirmek için] kullanın (http://php.net/manual/en/function.json-decode.php) – Prix

+0

Her şeyden önce dizi adında bir dizi Dog adında bir köpek gibidir. Lütfen dizinin için anlamlı bir isim bulun dostum. –

cevap

4

Gördüğüm kadarıyla bu bir dizi değil, bir json gibi görünüyor. Bu durumda, ilk önce bu yapmalıyım: Bu yardımcı olur

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/>"; 
} 

Hope: Bu dizi kastetmek gelince

$array = json_decode($array, true); 

, böyle bir şey deneyebilirsiniz. Onlar nesne özellikleri konum varsayarak

+2

Teşekkür ederim sooooooo :) Teşekkürler bir ton. İşe yaradı. –

2

Eğer json_decode gidiyoruz JSON veri, data, results, ve titles Dizi anahtarları değildir. $array->data->results->titles[0]; gibi bir şey deneyin. { karakteri bir object özelliğini gösterir, [ ise bir diziyi belirtir.

2

Kullanım

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