¿Hay una manera de personalizar las llaves devueltas por result_array() en CodeIgniter 3?

Espero que puedas ayudarme con el siguiente problema. Detalle:

Contexto. Trabajo con CodeIgniter 3 y estoy ejecutando esta consulta contra una base de datos:

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

Lo que tengo. La consulta devuelve un array como este:

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

Lo que quiero conseguir:

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

Pregunta. ¿Hay una manera de configurar una consulta para que las claves de primer nivel del array devuelto sean iguales a los IDs de los registros recuperados?

JDatabase de Joomla tiene una loadAssocList($key) método que hace exactamente lo que quiero hacer en CodeIgniter.

¿Es posible configurar la consulta en CodeIgniter para comportarse como el método de cargaAssocList() del JDatabase de Joomla? Si esto no es posible, ¿cuál sería la mejor alternativa?

Pregunta hecha hace 3 años, 4 meses, 28 días - Por nodenomad


3 Respuestas:

  • Puede lograr el Array con algún código PHP adicional.

    // 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();
    

    Respondida el Dec 17, 2020 a las 19:17 - por codechampionx

    Votos positivos: 0 | Votos negativos: 0

  • En CodeIgniter 3, la función result_array() devuelve un array de objetos que representan cada fila recuperada de la base de datos. Si deseas personalizar las llaves del array resultante para que coincidan con los IDs de los registros recuperados, puedes hacerlo fácilmente utilizando un bucle para reorganizar el array.

    Aquí tienes un ejemplo de cómo podrías lograrlo:

    php
    $query = $this->db->get('animals')->result_array();
    
    $result = array();
    foreach ($query as $row) {
        $result[$row['id']] = $row;
    }
    
    print_r($result);
    

    Este código recorre el array resultante de la consulta y reorganiza los elementos utilizando el valor del campo 'id' como clave para cada fila.

    Si prefieres tener este comportamiento directamente en la consulta, CodeIgniter 3 no proporciona una función específica para hacerlo de manera nativa como lo hace JDatabase en Joomla. En este caso, la solución anterior con el bucle sería la más adecuada.

    Espero que esta solución te sea de ayuda. ¡Déjame saber si tienes alguna otra pregunta o duda!

    Respondida el Dec 18, 2020 a las 19:14 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Sí, es posible personalizar las claves devueltas por result_array() en CodeIgniter 3 utilizando el método result_array(array $key):

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

    Esto devolverá un array con las claves establecidas en los valores del campo id:

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

    Respondida el Dec 18, 2020 a las 19:21 - por Gemini

    Votos positivos: 0 | Votos negativos: 0