0

json で検索結果を返す API を使用しています。これを PHP 配列にデコードし、配列をループして要素を変数として割り当てることで、そこから必要な要素を選択して、データベースに値を格納できるようにします。

私の問題は、検索パラメーターに依存するだけで、1 つまたは数十のプロパティが返される可能性があることです。私がこれを行うと、

$array = json_decode(file_get_contents("http://search-query-url&output=json"));

foreach($array as $cur) {
  $key1 = $cur->item_title;
  $key2 = $cur->item_url;
  $key3 = $cur->item_location;
  echo $key1 . " " . $key2 . " " . $key3 "<br>";
  }

... item_location (key3) が json 出力に存在しない限り、すべて問題ありません。このような場合、「未定義のプロパティ: stdClass::$item_location」というエラーが表示されます。

プロパティ名 (item_title、item_url など) は、値/文字列を格納する必要があるテーブル列を知る方法であるため、重要です。

私はこの問題を理解しようとして困惑しており、どこに行けばよいのかよくわかりません。in_array または in_object を使用しようとしていますが、何か間違っているに違いありません。対応するプロパティ名が存在する場合は、それに基づいて変数を作成する必要があります。

何かご意見は?ありがとうございました!

4

3 に答える 3

1

このような状況に対する私の通常のテクニックは、

  1. json_decode($var, true)オブジェクトではなく連想配列としてデータをデコードするために使用します。
  2. array_mergeを使用して、依存するすべてのキーのデフォルト値を設定します。
  3. 一部のフィールドがオプションであり、ユーザーが入力を提供したかどうかを知る必要がある場合は、falseまたはnullをデフォルト値として使用します。

これにより、構文的に不快なキーチェックの繰り返しがなくなります。

$array = json_decode(file_get_contents("http://search-query-url&output=json"), true);
$defaults = array(
    'item_title' => 'Default Title',
    'item_url' => 'default url',
    'item_location' => false
);
$array = array_merge($defaults, $array);

// check to see if we have a location or not using !==
if ($array['item_location'] !== false) {

}

私は実際にはオブジェクト構文を好みますが、PHP には便利な配列操作関数がたくさんあります。また、多くの PHP プログラマーは、オブジェクトよりも配列に慣れています。

于 2012-11-19T20:55:36.150 に答える
0

何よりもまず、 を使用json_decode("JSON_STRING", true);して、オブジェクトではなく配列を返すようにします。

あなたがそれをしたら、array_key_exists()うまくいくでしょう。

于 2012-11-19T20:48:43.863 に答える
0

変数が設定されているかどうかを確認し、設定されていない場合はそのキーに空白の値を割り当てることができます。

foreach($array as $cur) {
  $key1 = (isset($cur->item_title))?($cur->item_title):('');
  $key2 = (isset($cur->item_url))?($cur->item_url):('');
  $key3 = (isset($cur->item_location))?($cur->item_location):('');
  echo $key1 . " " . $key2 . " " . $key3 "<br>";
}
于 2012-11-19T20:49:24.583 に答える