お世話になります。
以前(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);
を入れることでヤフーの検索結果数は取得できたのですが、楽天はできていません。
できれば楽天の取得方法、又はページングの方法だけでもご教授いただけませんでしょうか。
文字数の関係で中略が多く恐縮です。
$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)
と同値になります。
$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)
と同値になります。
ご回答いただきありがとうございます。
>$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) {
?>
ココまで
という形です。 ご教授頂いたやり方で試してみたのですが、うまくいきませんでした。すみません。 GETで取得しているpageは、APIのパラメーターのpageということでしょうか?
ご回答いただきありがとうございます。
2013/08/15 21:17:34>$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) {
?>
ココまで
という形です。 ご教授頂いたやり方で試してみたのですが、うまくいきませんでした。すみません。 GETで取得しているpageは、APIのパラメーターのpageということでしょうか?