Хороший метод состоит в том, чтобы перегруппировать массив, чтобы он стал ассоциативным многомерным массивом по цене.
Таким образом, вы можете легко нарезать три элемента, и у вас есть ключи в основном массиве в качестве цен в удобном доступе.
$items = array(
array( 'id' => 104, 'book_id' => 32, 'price' => 55 ),
array( 'id' => 117, 'book_id' => 76, 'price' => 65 ),
array( 'id' => 135, 'book_id' => 77, 'price' => 65 ),
array( 'id' => 100, 'book_id' => 78, 'price' => 65 ),
array( 'id' => 101, 'book_id' => 21, 'price' => 85 ),
array( 'id' => 107, 'book_id' => 35, 'price' => 90 ),
array( 'id' => 108, 'book_id' => 64, 'price' => 90 ),
array( 'id' => 130, 'book_id' => 101, 'price' => 100 ),
);
foreach($items as $sub){
// Build new array
$new[$sub["price"]][] = $sub;
}
//ksort($new); // if you need to sort on price, should not be needed.
$lowest3 = array_slice($new, 0, 3 , true); // slice three and preserve keys with true
var_dump($lowest3);
Возвращает:
array(3) {
[55]=>
array(1) {
[0]=>
array(3) {
["id"]=>
int(104)
["book_id"]=>
int(32)
["price"]=>
int(55)
}
}
[65]=>
array(3) {
[0]=>
array(3) {
["id"]=>
int(117)
["book_id"]=>
int(76)
["price"]=>
int(65)
}
[1]=>
array(3) {
["id"]=>
int(135)
["book_id"]=>
int(77)
["price"]=>
int(65)
}
[2]=>
array(3) {
["id"]=>
int(100)
["book_id"]=>
int(78)
["price"]=>
int(65)
}
}
[85]=>
array(1) {
[0]=>
array(3) {
["id"]=>
int(101)
["book_id"]=>
int(21)
["price"]=>
int(85)
}
}
}
https://3v4l.org/2hARj