PHP - Создание многомерного массива через цикл на основе количества - PullRequest
5 голосов
/ 23 июня 2011

Возникли проблемы с правильной комбинацией count и foreach для многомерного массива.

В настоящее время я делаю следующее, чтобы создать ассоциативный массив из возвращенного результата моей базы данных:

$sql = "SELECT g.id, g.shortname FROM games g ORDER BY g.id ASC";
        $query = $this->db->query($sql);

        if($query->num_rows() > 0):
            foreach($query->result() as $row):
                $data[$row->id] = $row->shortname;
            endforeach;
        return $data;
        else:
            return false;
        endif;

Это, конечно, приводит к следующему массиву (который отлично работает; полу-искусственный код):

array ( [1] => CoolGame, [2] => AnotherGame, [3] => BetterGame, [4] => UglyGame)

.... и так далее

Но я хочу автоматически разбить результаты (на основе счетчика var / limiter) на группы с помощью многомерного массива, например:

array (Group 1 => 
         array([1] => CoolGame [2] => AnotherGame),
       Group 2 =>  
         array([3] => BetterGame [4] => UglyGame)
)

Так что в этом примере мой $depth_count = 2;

На случай, если кому-то будет интересно, я делаю это для работы с автоматически сгенерированными тегами <optgroup> для множественного выбора с помощью функции form_multiselect () помощника по формам. Нужна помощь в настройке моего PHP, чтобы учесть это. Спасибо!

Ответы [ 2 ]

7 голосов
/ 23 июня 2011

Вы можете использовать метод php array_chunk .Обратите внимание на его использование в измененном коде ниже:

if($query->num_rows() > 0):
    foreach($query->result() as $row):
        $data[$row->id] = $row->shortname;
    endforeach;

    $data = array_chunk($data, 2);

return $data;
1 голос
/ 23 июня 2011
$nGroup = 1; $curGroup = '';
$nRow = 0;
foreach ($query->result() as $row){
  if ($nRow++ % 2 == 0){ // change 2 to your limiter
    $curGroup = 'Group ' . $nGroup++;
    $data[$curGroup] = array();
  }
  $data[$curGroup][$row->id] = $row->shortname;
}

Что-то в этом роде?Отслеживайте строку, в которой вы находитесь, текущую группу, в которую вы добавляете, и название группы.Затем при каждом втором (или N-м) наборе переключайте группы.

...