重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

楽天市場ジャンル検索APIを使って、
任意の自ジャンル(current)から、子ジャンル(children->child)一覧を
取得し表示しようと思っているのですが、

なぜかAPIから取得した子ジャンルたちが、
おかしな並び順で取得されてしまいます。

例えば
「CD・DVD・楽器」のジャンル「genreId=101240」でリクエストを投げると、

CD : 101311
その他 : 112960
ビデオ : 101327
Blu-ray : 505034
DVD : 101354
レコード : 200531
カセット : 205900
LD : 200532
楽器 : 112493

といった並び順でAPIから返ってきます。
なんで「その他」が上から2番目なんだ・・・orz
といった感じで。

理想としては、

DVD : 101354
Blu-ray : 505034
CD : 101311
楽器 : 112493
レコード : 200531
カセット : 205900
ビデオ : 101327
LD : 200532
その他 : 112960

と並び替えたいのですが、
五十音順でもないし、ジャンルIDの昇順降順でもないし、

以前の楽天市場ジャンル検索APIでは、
ちゃんと並んでたのに・・・orz

どうやったら並び替え出来るのでしょうか?
どうかご教授のほどお願いします。

A 回答 (1件)

楽天APIのマニュアル読んでも、特に指定する方法はなさそうですね。



受け取ってから自前で並べ替えるしかないのではないでしょうか。

<?php

$data; //$dataを楽天から受け取ったジャンルの一覧として、

$sort_master = array('101354', '505034', '101311', '112493' ・・・・); //並び替え用マスタ
$sort_end = '112960'; //その他が必ず一番最後にくるようにするとして。


$sorted = array(); //並び替え後のデータを格納
$end = array(); //その他格納用

$cnt = count($sort_master); //indexを保持したいので、配列数を取得しておく

foreach($data['children'] as $child){

if(in_array($child['child']['genreId'], $sort_master)){ //並べ替えマスタに存在するジャンルIDだったら

$pos = array_search($child['child']['genreId'], $sort_master); //マスタの配列キーを取得して

$sorted[$pos] = $child; //そのキーに格納

}elseif($child['child']['genreId'] == $sort_end){

$sort_end = $child; //その他はその他用の変数にいれておく

}else{

$sorted[$cnt++] = $child; //マスタに存在しない奴らは並び順を添字を並び替えマスタの最大値より大きい値で保存

}


}

//最後にその他を$sortedに追加
$sorted[] = $sort_end;


?>

とか、ぱっと思いついた感じで書いてみました。
コレを全ジャンルにかけるのは正直微妙ではありますが、特定のジャンルのみサイトに表示されるのであれば、
そんなには問題ないのかなと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。
おかげさまでなんとかなりました。

お礼日時:2013/09/25 23:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!