2016-07-07 14 views
-1

会社からAPIを使って何か試してみたかったのです。彼らのデータを自分のデータベースに入れたいと思っていました。しかし、私は問題に遭遇しました。 APIには、 "venue.country"という1つのJSONオブジェクトがあります。しかし何らかの理由で私の配列にドットを使うことはできないのですか?ここでなぜドットを配列で使用できないのですか?

はコードです:ここ

foreach ($data[1]['hits']['hits'] as $row) { 
     $statement->execute(array(
      "name" => $row['fields']['name'][0], 
      "date" => $row['fields']['start'][0], 
      "lang_long" => "test", 
It is this one! -> "country" => $row['fields']['venue.country'][0], 
      "genres" => $row['fields']['genres'][0], 
      "desc" => $row['fields']['description'][0], 
      "logo" => $row['fields']['logo'][0], 
      "header_pic" => $row['fields']['header'][0] 
     )); 
    } 

\ PHP 内の他の作品のすべてとは、JSONの一部です:

venue.country: [ 
"Nederland" 
], 

は、どのように私はこの仕事を得ることができますか? 「分解」メソッドを使用できますか? https://hugo.events/genre/pop/next/200/120

ありがとう:

これは完全なJSONです。

EDIT:でも回答@Prototypeチェーンと が、それは私にこのエラーを与えている与えた:これはトリックを行いますNotice: Undefined index: venue in /home/ubuntu/workspace/pop.php on line 18

+1

本当にPHPエラーですか?あなたはどんなエラーを出していますか? – ordonezalex

+0

'print_r($ row);'の出力は? – Rizier123

答えて

0

コードが正常に動作します。デバッグ後、配列要素$ data [1] ['hits'] ['hits'] [50]と$ data [1] ['hits'] ['hits']のkey/index venue.countryはありません[ヒット] [51]。インデックスがないので、投げ出し通知。

変数を指定する前に@を付けて通知を抑制したり、インデックスがexixtsの場合は条件をチェックしたりすることができます。

"country" => @$row['fields']['venue.country'][0], 

"country" => isset($row['fields']['venue.country']) ? $row['fields']['venue.country'][0] : '', 

//このコードをテスト用に実行します。

error_reporting(E_ALL); 
ini_set('display_errors', 1); 
$jsondata = file_get_contents('https://hugo.events/genre/pop/next/200/100'); 
$data  = json_decode($jsondata, true); 
foreach ($data[1]['hits']['hits'] as $row) { 
    // echo $row['fields']['name'][0].'=>'[email protected]$row['fields']['venue.country'][0].'<br/>'; 
    $array[]= array(
     "name" => $row['fields']['name'][0], 
     "country" => isset($row['fields']['venue.country']) ? $row['fields']['venue.country'][0] : '' 
     ); 
} 
echo "<pre>"; 
print_r($array); 
+0

私はあなたのコードを使用しても私はまだ私のデータベースに国を取得しません –

+0

あなたはすべての行がいくつかのための国を取得していないという意味ですか? –

+0

私はすべての国のためにそれらをgettimgしていません –

-2

希望を...

$row['fields']['venue']['country'][0] 
+0

Nopeは機能しませんでした –

0

それは見ずにデバッグするには少し難しいですしかし、JSONデータの内容全体は、以前は、JSONやXMLデータを奇妙にフォーマットしたソースから解析するのに苦労していましたが、前にデータに対して前処理str_replace()を実行すると便利でした。それを解析した。

したがって、このような何かがあなたのために働くかもしれない:

$input = some_function_to_get_string_data_from_api(); 
$input = str_replace("venue.country", "venuecountry", $input); 
$json = json_encode($input); 

それはエレガントな解決策ではない、とあなたは修正必要とする分野のとてもたくさんを扱っている場合、それはすぐに離れて落ちるが、あなたが」あなたに問題を与えている1つまたは2つのフィールドだけを扱うだけであれば、それは素早く汚れたパッチになる可能性があります。

+0

まだ同じエラーです。私は自分のコードに一致するようにコードを変更しました –

+0

このルートに行く場合、あなたはまた変更する必要があります:$ row ['fields'] ['venue.country'] [0] to:$ row ['fields'] ['venuecountry'] [0] 変更後も同じエラーが発生している場合は、フィールド名のドットと無関係なエラーです – stevecomrie

+0

まだ同じエラーが表示されます。私はAPIをチェックしなければなりません。 –

1

このコードはうまくあなたの例JSONデータを与えられた作品:

$string = <<<EOT 
    {INSERT YOUR JSON STRING HERE} 
EOT; 

$json = json_decode($string, true); 
echo $json[1]['hits']['hits'][0]['fields']['venue.location'][0] . "\n"; 
echo $json[1]['hits']['hits'][0]['fields']['venue.location'][1] . "\n"; 
+0

それは私に多くの不正な文字列オフセットを与えます:https://wtd-server-a1070rik.c9users.io/pop。phpそれを確認してください –

+0

そのpop.phpページで使用している完全なコードのbinを投稿してください。このエラーは、<<< EOTブロック内の文字列の前後に引用符を入れるなどしない限り意味がありません。 – stevecomrie

+0

<<< EOTブロックは使用できません。私はURLを使用する必要があります。そうでなければ私はすべてを自動で行う必要があります。それは私の目標ではありません –

関連する問題