2016-07-15 1 views
-2

JSON URLからPHP Webページにデータを取得しようとしています。元のURLは次のとおりです。JSONからPHPへの構文解析が意図したとおりに機能しない

http://reverseip.logontube.com/?url=104.28.23.18&output=json

URLは、ホストのIPおよびそのIPでホストされているすべてのドメインを返します。

JSONオンラインツールを使用して、出力をデコードしようとしました。出力は次のようになります。

stdClass Object ([hostip] => 104.28.23.18 [hostname] => 104.28.23.18 [response] => stdClass Object ([domain_count] => 14 [domains] => Array ([0] => th998877.com [1] => careerplanningbooks.com [2] => humanhangbag.com [3] => azbabycarez.net [4] => travellersrights.com [5] => big-booobs-pics.net [6] => enddepression.us [7] => alumnihighschool.net [8] => rubilax.com [9] => xtcts.com [10] => car-hoken-navi.com [11] => lightpostlocalexperts.com [12] => dublo.net [13] => 123savemp3.info))) 

上記は生データです。 それから、PHP関数を使ってそのデータをWebページに表示しました。これは、PHPスクリプトが使用されている:

$string = file_get_contents("http://reverseip.logontube.com/?url=104.28.23.18&output=json"); 
$json = json_decode($string, true); 

foreach ($json as $key => $value) { 
if (!is_array($value)) { 
    echo $key . '=>' . $value . '<br />'; 
} else { 
    foreach ($value as $key => $val) { 
     echo $key . '=>' . $val . '<br />'; 
    } 
} 
} 

そして、これが私のWebページに表示され、私はPHPからもらった出力です:

hostip=>104.28.23.18 

hostname=>104.28.23.18 

domain_count=>14 

domains=>Array 

、私の質問は:上記の最後の行には、なぜドメインを配列Array?私はth998877.com careerplanningbooks.comなどの各ドメインの名前を期待していました。元のJSON URLを使用してPHPでこれらのドメインをどのように表示できますか?

+1

'$のval'が配列であるとき - それは文字列表現だあなたは配列の値を印刷したい場合は、'「アレイ」 'される - '再びforeach'を行います。 –

+0

あなたは私に追加するコードを教えてもらえますか? – Online

+0

ありがとう、Tonzaは私に追加のコードをくれました。 – Online

答えて

0

あなたが効果的に配列出力を平坦化しているが、あなたはまた、そこでのstdClass ESで混合した新しいforeachのを作るために

<?php 
$string = file_get_contents("http://reverseip.logontube.com/?url=104.28.23.18&output=json"); 
$json = json_decode($string, true); 

foreach ($json as $key => $value) { 
    if (!is_array($value)) { 
    echo $key . '=>' . $value . '<br />'; 
    } else { 
     foreach ($value as $key => $val) { 

      //Add this to your code 

      if(is_array($val)){ 
       foreach($val as $array => $i){ 
        echo $i . '<br />'; 
       } 
      } 
      else{ 
       echo $val . '<br />'; 
      } 


     } 
    } 
} 
+0

これは完璧に動作しました! – Online

1

$valueはあなたがそれをレンダリングするために、ユーザprint_r()関数に持つ配列の場合、この

foreach ($json as $key => $value) { 
     if (!is_array($value)) { 
      echo $key . '=>' . $value . '<br />'; 
     } 
     else { 
      echo $key . '=>' . print_r($value) . '<br />'; 
     } 
    } 

を試してみてください。

+0

これは次のように出力しています:response => 1 – Online

0

を必要としています。ここでは、おそらく仕事になるだろう簡単な方法があります:

array_walk_recursive($json, function($val, $key) { echo "$key=>$val<br/>"; }); 
関連する問題