У меня есть начальный массив:
$arr0 = array( 0 => array( 'a' => 1, 'b' => 1 ) 1 => array( 'a' => 2, 'b' => 1 ) 2 => array( 'a' => 3, 'b' => 2 ) 3 => array( 'a' => 4, 'b' => 3 ) 4 => array( 'a' => 5, 'b' => 3 ) );
Я хочу разделить его на отдельные массивы в зависимости от значения его членов поля «b», например:
// $arr1 contains $arr0[0] and $arr0[1] because their value of 'b' is 1. $arr1 = array( 0 => array( 'a' => 1, 'b' => 1 ) 1 => array( 'a' => 2, 'b' => 1 ) ); // $arr2 contains $arr0[2] because its value of 'b' is 2. $arr2 = array( 0 => array( 'a' => 3, 'b' => 2 ) ); // $arr3 contains $arr0[3] and $arr0[4] because their value of 'b' is 3. $arr3 = array( 0 => array( 'a' => 4, 'b' => 3 ) 1 => array( 'a' => 5, 'b' => 3 ) );
Теперь поле «b» может иметь любое натуральное число для значения, поэтому это не всегда три результирующих массива, которые мне понадобятся.
Здесь я нашел связанный с этим вопрос (и ответы), но моя проблема специфична, потому что я заранее не знаю, что такое исходные значения «b», и сколько из них имеет разные значения.
Есть идеи?
(изменить: $ arr3 было написано как $ arr1)
foreach ($arr0 as $value) { ${"arr" . $value['b']}[] = $value; } // $arr1, $arr2 and $arr3 are defined
Во второй строке есть магия, которая динамически создает имя переменной. Однако такой способ программирования действительно громоздкий; вам лучше сделать результаты в еще один массив, например:
foreach ($arr0 as $value) { $allarr[$value['b']][] = $value; } // $allarr is defined
foreach ($arr0 as $val) { $b = $val ['b']; if (!$arr$b) $arr$b = array(); $arr$b[] = $val; }