DBにデータを格納することはオプションではないため、PHP内でマージしソートする必要があります。 、
$mysql = array
(
array('name' => 'I', 'date' => '20110804'),
array('name' => 'J', 'date' => '20110805'),
array('name' => 'F', 'date' => '20110801'),
array('name' => 'D', 'date' => '20110730'),
array('name' => 'B', 'date' => '20110728'),
array('name' => 'G', 'date' => '20110802'),
);
$eventful = array
(
array('name' => 'L', 'date' => '20110807'),
array('name' => 'A', 'date' => '20110727'),
array('name' => 'E', 'date' => '20110731'),
array('name' => 'H', 'date' => '20110803'),
array('name' => 'K', 'date' => '20110806'),
array('name' => 'C', 'date' => '20110729'),
);
あなたは各データソースに表示する最大のイベントの等しい量を選択することをお勧めします:あなたのデータソースを記述し、それぞれ1 -
は、ここでは、2つの順不同のアレイを使用して、例えば、(CodePad)であります
$dates = array();
$result = array_merge($mysql, $eventful);
foreach ($result as $key => $value)
{
$dates[$key] = $value['date'];
}
array_multisort($dates, SORT_ASC, $result);
$result
変数は、次に昇順にソートされます:
、我々はその後ソート
array_multisort()
を使用します単一の多次元アレイに両方のアレイをマージ
Array
(
[0] => Array
(
[name] => A
[date] => 20110727
)
[1] => Array
(
[name] => B
[date] => 20110728
)
[2] => Array
(
[name] => C
[date] => 20110729
)
[3] => Array
(
[name] => D
[date] => 20110730
)
[4] => Array
(
[name] => E
[date] => 20110731
)
[5] => Array
(
[name] => F
[date] => 20110801
)
[6] => Array
(
[name] => G
[date] => 20110802
)
[7] => Array
(
[name] => H
[date] => 20110803
)
[8] => Array
(
[name] => I
[date] => 20110804
)
[9] => Array
(
[name] => J
[date] => 20110805
)
[10] => Array
(
[name] => K
[date] => 20110806
)
[11] => Array
(
[name] => L
[date] => 20110807
)
)
降順が必要な場合は、代わりにSORT_DESC
定数を使用できます。
この配列は、あなただけのarray_chunk()
を使用することができるのpaginateへ:
順番に、追加のディメンションを持つ配列生成し、 $result = array_chunk($result, 4); // 4 events per "page"
:これは、Aであることを
Array
(
[0] => Array
(
[0] => Array
(
[name] => A
[date] => 20110727
)
[1] => Array
(
[name] => B
[date] => 20110728
)
[2] => Array
(
[name] => C
[date] => 20110729
)
[3] => Array
(
[name] => D
[date] => 20110730
)
)
[1] => Array
(
[0] => Array
(
[name] => E
[date] => 20110731
)
[1] => Array
(
[name] => F
[date] => 20110801
)
[2] => Array
(
[name] => G
[date] => 20110802
)
[3] => Array
(
[name] => H
[date] => 20110803
)
)
[2] => Array
(
[0] => Array
(
[name] => I
[date] => 20110804
)
[1] => Array
(
[name] => J
[date] => 20110805
)
[2] => Array
(
[name] => K
[date] => 20110806
)
[3] => Array
(
[name] => L
[date] => 20110807
)
)
)
ベア心の中を主に一般的なデータベースのソートとリミットよりも効率が悪いです。これは主に、データ全体をメモリにロードしているためです。アクティブな「ページ」に必要なものでもありません。
処理しようとしているデータの量はわかりませんが、array_multisort()
はさらに数千個のレコードまで十分にパフォーマンスがあります。チャンク化された配列の不要なインデックスを破棄するか、array_slice()
と算術演算を使用して特定のページに属する4つの特定のレコードを取得することができます。
しかし、あなたの選択を最適化することができれば(多分ビジネス/日付論理では)、並べ替え+チャンク(またはスライス)処理のほうがCPUとメモリをより使いやすくするでしょう。
これは実際には機能しますが、私はAPIがキャッシュの保存やメンテナンスを許可していないことを読みました。一度に多くのレコードを取得する可能性があるので、このアプローチに対する私の他の懸念はパフォーマンスだと思います。答えをありがとう。 – CloudSurf