Как сохранить оригинальные уникальные ключи массива при использовании 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"]=&gt; int(0) ["b"]=&gt; int(1) ["c"]=&gt; int(2) ["d"]=&gt; int(3) ["e"]=&gt; int(4) ["f"]=&gt; int(5) ["g"]=&gt; int(6) ["h"]=&gt; int(7) ["i"]=&gt; int(8) ["j"]=&gt; int(9) } array(4) { [0]=&gt; array(3) { ["a"]=&gt; int(0) ["b"]=&gt; int(1) ["c"]=&gt; int(2) } [1]=&gt; array(3) { ["d"]=&gt; int(3) ["e"]=&gt; int(4) ["f"]=&gt; int(5) } [2]=&gt; array(3) { ["g"]=&gt; int(6) ["h"]=&gt; int(7) ["i"]=&gt; int(8) } [3]=&gt; array(1) { ["j"]=&gt; int(9) } }</pre>

licensed under cc by-sa 3.0 with attribution.