2015-11-17 2 views
1

У меня есть таблица с именем «транспортные средства» в проекте CodeIgniter.Создание многомерного массива из данных в CodeIgniter

+----+---------+--------+ 
| id | name | make | 
+----+---------+--------+ 
| 1 | Corolla | Toyota | 
| 2 | Parado | Toyota | 
| 3 | Sunny | Nissan | 
| 4 | Maxima | Nissan | 
| 5 | Premoio | Toyota | 
+----+---------+--------+ 

Как я могу получить многомерный массив из этого, как показано ниже:

Array 
(
    [Toyota] => Array 
     (
      [1] => Corolla 
      [2] => Parado 
      [5] => Premio 
     ) 

    [Nissan] => Array 
     (
      [3] => Sunny 
      [4] => Maxima 
     ) 
) 

ответ

2

Давайте предположим, что вы можете получить все записи из таблицы в массиве, как в переменной $rows.

$rows = [ 
    ['id' => 1, 'name' => 'Corolla', 'make' => 'Toyota'], 
    ['id' => 2, 'name' => 'Parado', 'make' => 'Toyota'], 
    ['id' => 3, 'name' => 'Sunny', 'make' => 'Nissan'], 
    ['id' => 4, 'name' => 'Maxima', 'make' => 'Nissan'], 
    ['id' => 5, 'name' => 'Premoio', 'make' => 'Toyota'] 
]; 

$result = []; 
foreach ($rows as $row) { 
    $result[$row['make']][$row['id']] = $row['name']; 
} 

И только в одном цикле вы можете достичь этого. Надеюсь, это поможет.

CodeIgniter 3.x

$query = $this->db->get('vehicles'); 

$result = []; 
if($this->db->count_all_results() > 0) 
{ 
    foreach ($query->result_array() as $row) 
    { 
     $result[$row['make']][$row['id']] = $row['name']; 
    } 
} 

echo '<pre>'; 
print_r($result); 
echo '</pre>'; 
1

Что-то вроде этого:

$cars = array(); 

$unique_makes = $this->db->distinct('make')->get('vehicles')->result(); 

foreach($unique_makes as $make){ 
    $models = $this->db->where('make', $make)->get('vehicles')->result(); 
    $cars[$make] = $models; 
} 
1

добивается результата с следующим кодом. Ответ Джереми Джексона дал мне представление, что я должен сделать для этого. Но его код не сработал. Спасибо, Джереми.

Вот мой код:

$cars = array(); 

$makes = $this->db->select('make')->distinct()->get('vehicles')->result_array(); 
$makes = array_column($makes, 'make'); 

foreach($makes as $make) { 
    $models = $this->db->where('make', $make)->get('vehicles')->result_array(); 
    $cars[$make] = array_combine(array_column($models, 'id'), array_column($models, 'name')); 
} 

print_r($cars); 
+0

Вы делаете больше, чем один MySQL запрос в коде, где вы можете сделать это с помощью одного запроса. Не так ли? Вы видели мой ответ? – HADI

+0

@HADI жаль, что я не мог понять ваш код первым. Теперь я вижу это. Вы показали мне правильный путь. –

+0

Это нормально, приятель :) – HADI

Смежные вопросы