人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP 楽天とYahooショッピングの検索結果をページング処理

お世話になります。
以前(http://q.hatena.ne.jp/1375374890)色々教えていただき、検索結果は取得できたのですが、これをページングさせたく、再度質問させて頂きます。


<?php
?前略(前回と同じ)?

$yahoo_data = array();
foreach ($yxml->Result->Hit as $Hit) {
$yahoo_data[] = array('itemName'=>(string)$Hit->Name,
//?中略?
'yitemCount'=>(string)$totalResultsAvailable);
}

$merge_data = array_merge($rakuten_data,$yahoo_data);

//?中略(教えて頂いたソート方法)?

foreach(array_slice($merge_data,0,21) as $result) {
?>

<?=mb_substr($result[$itemName],0,25,'UTF-8')?>
//?中略?
<?php } ?>


この後にページング処理を入れたく、以下などを参考にしたのですがうまくいきません。
http://tenderfeel.xsrv.jp/php/639/
http://rasukaru55.sitemix.jp/pageing.php

検索結果の数を取得できないと話にならないと思い、

$totalResultsAvailable = $yxml->attributes()->totalResultsAvailable;
……
'yitemCount'=>(string)$totalResultsAvailable);

を入れることでヤフーの検索結果数は取得できたのですが、楽天はできていません。

できれば楽天の取得方法、又はページングの方法だけでもご教授いただけませんでしょうか。
文字数の関係で中略が多く恐縮です。

●質問者: cafe-beret
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● holoholobird
●500ポイント ベストアンサー

$merge_dataにはソート済みの結果が格納されているのですよね?
例えば1ページ当たり30件のデータを表示する場合は、
nページ目の時には30*(n-1)から30件分取り出せばいいので、
では

<?php
//ページ番号取得。ないときには1ページ目を表示。
$page=1;
if(isset($_GET['page'])){
 $page=$_GET['page']);
}
//1件当たりの表示件数。30だと1ページにつき30件表示します。
$echo_num=30;
$start_num=$echo_num*($page-1);
:
foreach(array_slice($merge_data,$start_num,$echo_num) as $result) {
?>

<?=mb_substr($result[$itemName],0,25,'UTF-8')?>
//?中略?
<?php } ?>

でいいと思います。
30件ずつ表示する設定で1ページ目を表示してみると、
$start_num=0;$echo_num=30;となり、このとき
array_slice($merge_data,$start_num,$echo_num)

array_slice($merge_data,0,30)
と同値になります。


cafe-beretさんのコメント
ご回答いただきありがとうございます。 >$merge_dataにはソート済みの結果が格納されているのですよね? ソート前のデータが入っています。 ココから //この前に、楽天とYahooのデータを取得する処理 $merge_data = array_merge($rakuten_data,$yahoo_data); function cmp_func($a, $b) { global $SORT_field; $field = $SORT_field; if ($a[$field] == $b[$field]) { return 0; } return ($a[$field] < $b[$field]) ? -1 : 1; } $SORT_field = 'itemPrice'; usort($merge_data, "cmp_func"); foreach(array_slice($merge_data,0,21) as $result) { ?> <?=mb_substr($result[$itemName],0,25,'UTF-8')?> ココまで という形です。 ご教授頂いたやり方で試してみたのですが、うまくいきませんでした。すみません。 GETで取得しているpageは、APIのパラメーターのpageということでしょうか?

質問者から

ご回答いただきありがとうございました。

結果的には、まだ処理できていないため、もう少し考えてみようと思います。

ありがとうございました。


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ