LIMIT
MySQLのように、配列内のメンバーの数を制限することは可能ですか?たとえば、メンバーと$array
一緒にいx
て、最初の50人だけを返したい場合、どうすればよいですか?
count()
との組み合わせを使用する必要array_slice()
がありますか、それとももっと簡単な方法がありますか?
array_sliceを使用するとうまくいくはずです。
array_slice($array, 0, 50); // same as offset 0 limit 50 in sql
SPL(より良いメモリフットプリント)を使用する場合:
// Using fixed array
$fixedArray = SplFixedArray::fromArray($array);
$fixedArray->setSize(min(50, count($array));
// Using iterator
$limitIterator = new LimitIterator(new ArrayIterator($array), 0, 50);
$array
長さが50だけであることを確認してください。
array_splice($array, 50);
または、最初の50を返します。
$new_array = array_slice($array, 0, 50);
どれくらい簡単になると思いますか?;)
配列自体では、その中の要素の数を制限する方法はありません。
配列の最初の50要素(または特定のオフセットの後の最初の50要素)をループで取得する独自の方法を実装できます(連想配列でarray_splice()
は機能しないため、ループをお勧めします)。
function limit($array, $limit, $offset = 0) {
$return = array();
$end = ($limit + $offset);
$count = 0;
foreach ($array as $key => $val) {
if ($count++ > $offset) {
$return[$key] = $val;
}
if ($count == $end) break;
}
return $return;
}
編集array_slice($array, $offset, $limit, true);
:この関数は、 ;を使用した場合と同じ結果を提供します。4番目のパラメーターは、連想配列のキーを保持します。