Есть ли способ настроить ключи, возвращаемые result_array() в CodeIgniter 3?

#php #codeigniter-3

#php #codeigniter-3

Вопрос:

Надеюсь, вы сможете помочь мне со следующей проблемой. Подробнее:

Контекст. Я работаю с CodeIgniter 3 и выполняю этот запрос к базе данных:

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

Что я получаю. Запрос возвращает массив, подобный этому:

 Array (
    [0] => Array (
        [id] => 27
        [created_at] =>
        [updated_at] =>
        [name] => Abc
    )
    [1] => Array (
        [id] => 35
        [created_at] =>
        [updated_at] =>
        [name] => Def
    )
)
 

Что я хочу получить:

 Array (
    [27] => Array (
        [id] => 27
        [created_at] =>
        [updated_at] =>
        [name] => Abc
    )
    [35] => Array (
        [id] => 35
        [created_at] =>
        [updated_at] =>
        [name] => Def
    )
)
 

Вопрос.Есть ли способ настроить запрос так, чтобы ключи первого уровня возвращаемого массива были равны идентификаторам извлеченных записей?

JDatabase Joomla имеет метод loadAssocList($key), который делает именно то, что я хочу сделать в CodeIgniter.

Можно ли настроить запрос в CodeIgniter так, чтобы он вел себя как метод loadAssocList() JDatabase от Joomla? Если это невозможно, что было бы лучшей альтернативой?

Комментарии:

1. Первый «уровень» — это индекс массива… Поэтому, если вы на самом деле не хотите перебирать массив и каждый раз менять ключи, вам следует просто оставить это в покое. Почему вы хотите это сделать?

Ответ №1:

Вы можете получить массив с помощью некоторого дополнительного кода PHP.

 // using your query ...
$query = $this->db->get('animals')->result_array();


// loop through each record of the result array and change its key positions   
foreach ($query as $key => $row) {
    $key_change = $row['id'];
    unset($query[$key]);
    $query[$key_change] = $row;
}


// view output (optional)
var_dump($query);
die();