Как сохранить оригинальные уникальные ключи массива при использовании array_chunk?

У меня есть массив объектов, каждый из которых имеет уникальный случайный идентификатор.

111 => 
 object(stdClass)[452]
 public 'Description' => string 'Description here...' (length=728) 
 public 'Name' => string 'Shirt' (length=18)
 public 'Price' => float 36.56
222 => 
 object(stdClass)[452]
 public 'Description' => string 'Description here...' (length=728) 
 public 'Name' => string 'Pants' (length=18)
 public 'Price' => float 36.56
333 => 
 object(stdClass)[452]
 public 'Description' => string 'Description here...' (length=728) 
 public 'Name' => string 'Dress' (length=18)
 public 'Price' => float 36.56
444 => 
 object(stdClass)[452]
 public 'Description' => string 'Description here...' (length=728) 
 public 'Name' => string 'Dress' (length=18)
 public 'Price' => float 36.56
...

Моя цель состоит в том, чтобы разделить мои массивы с ключами объектов на куски 2 для целей разбивки на страницы. Так что-то вроде этого:

0 =>
 111 => 
 object(stdClass)[452]
 public 'Description' => string 'Description here...' (length=728) 
 public 'Name' => string 'Shirt' (length=18)
 public 'Price' => float 36.56
 222 => 
 object(stdClass)[452]
 public 'Description' => string 'Description here...' (length=728) 
 public 'Name' => string 'Pants' (length=18)
 public 'Price' => float 36.56
1 =>
 333 => 
 object(stdClass)[452]
 public 'Description' => string 'Description here...' (length=728) 
 public 'Name' => string 'Dress' (length=18)
 public 'Price' => float 36.56
 444 => 
 object(stdClass)[452]
 public 'Description' => string 'Description here...' (length=728) 
 public 'Name' => string 'Dress' (length=18)
 public 'Price' => float 36.56
...

Моя проблема заключается в использовании array_chunk() для разделения массивов объектов на группы по 2, мой уникальный идентификатор не сохраняется.

private function paginate($array)
{
 $chunks = 2;
 $paginatedResults = array_chunk($array, $chunks);
 return $paginatedResults;
}

Выход функции:

0 =>
 0 => 
 object(stdClass)[452]
 public 'Description' => string 'Description here...' (length=728)
 public 'Name' => string 'Shirt' (length=18)
 public 'Price' => float 36.56
 1 => 
 object(stdClass)[452]
 public 'Description' => string 'Description here...' (length=728)
 public 'Name' => string 'Pants' (length=18)
 public 'Price' => float 36.56
1 =>
 0 => 
 object(stdClass)[452]
 public 'Description' => string 'Description here...' (length=728)
 public 'Name' => string 'Dress' (length=18)
 public 'Price' => float 36.56
 1 => 
 object(stdClass)[452]
 public 'Description' => string 'Description here...' (length=728)
 public 'Name' => string 'Dress' (length=18)
 public 'Price' => float 36.56
...

Как я могу разбить свой массив с ключом на другой массив, содержащий 2 объекта на индекс, сохраняя мои исходные ключи массива, содержащие уникальный идентификатор?

2 ответа

Все, что мне нужно было сделать, это установить третий параметр array_chunk() в true следующим образом:

$paginatedResults = array_chunk($array, $chunk, true);


Похоже на третий параметр array array_chunk (массив $input, int $size [, bool $preserve_keys = false]) контролирует именно это.

<p>печатает</p> <pre class="prettyprint linenums">array(10) { ["a"]=> int(0) ["b"]=> int(1) ["c"]=> int(2) ["d"]=> int(3) ["e"]=> int(4) ["f"]=> int(5) ["g"]=> int(6) ["h"]=> int(7) ["i"]=> int(8) ["j"]=> int(9) } array(4) { [0]=> array(3) { ["a"]=> int(0) ["b"]=> int(1) ["c"]=> int(2) } [1]=> array(3) { ["d"]=> int(3) ["e"]=> int(4) ["f"]=> int(5) } [2]=> array(3) { ["g"]=> int(6) ["h"]=> int(7) ["i"]=> int(8) } [3]=> array(1) { ["j"]=> int(9) } } </pre>

licensed under cc by-sa 3.0 with attribution.