複数のAPIで取得したデータを配列に格納したいのですが方法を教えて下さい。

(二週間ほどはまっていますので助言を頂けると助かります。)

具体的にやりたいことは、アマゾンのProduct Advertising APIやヤフーのオークションAPIにリクエストを送り返ってきたxmlからそれぞれ商品名や価格の値を取得し、最終的に価格等で並び替えをして出力するというものです。

各APIからxmlを取得して普通に出力することは出来ます。
foreachのループ内で処理しようと試したのですがうまく行きませんでした。

■作成ソースのイメージ(PHP)
//Product Advertising APIでxmlを取得
foreach ($Items->Item as $item) {
$arr += array(
'name' => $item->商品名,
'price' => $item->価格
);
}

//続いてヤフーオークションAPIでxmlを取得
foreach ($result->Result->Item as $item) {
$arr += array(
'name' => $item->商品名,
'price' => $item->価格
);
}

//価格で並び替え
foreach ($arr as $key => $value) {
$price[$key] = $value['price'];
}
array_multisort($price, SORT_DESC, $arr);

//出力
for ($i = 0; $i <= 10; $i++) {
echo '<b>' . $arr['name'][$i] . '</b>' . $arr['price'][$i] . '<br>' ;
}

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/06/10 22:23:28
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.2

回答回数4974ベストアンサー獲得回数2154

ポイント150pt

以下のふたつを修正する必要があります。

  • 配列への追加の仕方
  • 最後に出力するときの配列の添え字

質問にあるソースのイメージに手を入れてみました。

<?php
//Product Advertising APIでxmlを取得
foreach ($Items->Item as $item) {
// ★ += ではなく、[] =
    $arr[] = array(
        'name' => $item->商品名,
        'price' => $item->価格
    );
}

//続いてヤフーオークションAPIでxmlを取得
foreach ($result->Result->Item as $item) {
// ★ += ではなく、[] =
    $arr[] = array(
        'name' => $item->商品名,
        'price' => $item->価格
    );
}

//価格で並び替え
foreach ($arr as $key => $value) {
    $price[$key] = $value['price'];
}
array_multisort($price, SORT_DESC, $arr);

//出力
for ($i = 0; $i <= 10; $i++) {
// ★ ['name'][$i] ではなく、[$i]['name']。'price' も同様
    echo '<b>' . $arr[$i]['name'] . '</b>' . $arr[$i]['price'] . '<br>' ;
}
?>

http://www.php.net/manual/ja/language.types.array.php#language.types.array.syntax.modifying

id:finnapple

サンプルソースありがとうございました。
無事うまくいきました。

2014/06/10 22:23:11

その他の回答1件)

id:watercooler No.1

回答回数289ベストアンサー獲得回数51

ポイント150pt

$arr += array(

データ追加部分がおかしいわ。

$arr[] = array(

関係ないかもだけどSORT_DESCでいいの?SORT_ASCのほうが良くないかしら?

id:finnapple

ご指摘の通りでした。
ありがとうございます。

2014/06/10 22:22:24
id:a-kuma3 No.2

回答回数4974ベストアンサー獲得回数2154ここでベストアンサー

ポイント150pt

以下のふたつを修正する必要があります。

  • 配列への追加の仕方
  • 最後に出力するときの配列の添え字

質問にあるソースのイメージに手を入れてみました。

<?php
//Product Advertising APIでxmlを取得
foreach ($Items->Item as $item) {
// ★ += ではなく、[] =
    $arr[] = array(
        'name' => $item->商品名,
        'price' => $item->価格
    );
}

//続いてヤフーオークションAPIでxmlを取得
foreach ($result->Result->Item as $item) {
// ★ += ではなく、[] =
    $arr[] = array(
        'name' => $item->商品名,
        'price' => $item->価格
    );
}

//価格で並び替え
foreach ($arr as $key => $value) {
    $price[$key] = $value['price'];
}
array_multisort($price, SORT_DESC, $arr);

//出力
for ($i = 0; $i <= 10; $i++) {
// ★ ['name'][$i] ではなく、[$i]['name']。'price' も同様
    echo '<b>' . $arr[$i]['name'] . '</b>' . $arr[$i]['price'] . '<br>' ;
}
?>

http://www.php.net/manual/ja/language.types.array.php#language.types.array.syntax.modifying

id:finnapple

サンプルソースありがとうございました。
無事うまくいきました。

2014/06/10 22:23:11
  • id:sasada
    直接関係ないかもですが、

    ray_multisort($price, SORT_DESC, $arr);

    は、

    ray_multisort($price, SORT_NUMERIC, SORT_DESC, $arr);

    の方が良いかもしれません。(降順に並べるとして)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません