简体   繁体   English

生成嵌套数组codeigniter

[英]Generate nested array codeigniter

For a graph I'm working on, I'm trying to generate a nested array. 对于正在处理的图形,我正在尝试生成嵌套数组。 I'm querying the database to try and get all the data from a certain column in my database as an array, but i'm not really quite sure how to do it. 我正在查询数据库以尝试从数据库的某个列中获取所有数据作为数组,但是我不太确定该怎么做。 Currently it giving me the last row in my database. 目前它给了我数据库的最后一行。

Here is my code: 这是我的代码:

    function get_data()
{
    $this->db->select('ItemName, QuantitySold');
    $query = $this->db->get('transactions');

    $results = array();

    foreach ($query->result_array() as $row)
        {
           $row['QuantitySold'];
           $row['ItemName'];
        }

        $results = array(
            'name' => 'shirt',
            'data' => $row['QuantitySold']
            );
        $test = json_encode($results);
        echo $test;
        return $results;
}

It is generating this result: 它正在生成此结果:

    {"name":"shirt","data":"9"}

And I need it to look something like this: 我需要它看起来像这样:

    {'name':'shirt','data':array(1, 2, 3,...)}

Database Structure: http://d.pr/i/cQaW 数据库结构: http//d.pr/i/cQaW

Rows: http://d.pr/i/8vp2 行: http//d.pr/i/8vp2

 $result = array();

 foreach ($query->result_array() as $row)
 {
   //if new item, initiate array in order not to get an exception
   if( !isset($result[$row['ItemName']]) ) {
     $result[$row['ItemName']]['data'] = array();
     $result[$row['ItemName']]['name'] = $row['ItemName'];
   }
   //group data by item name

   $result[$row['ItemName']]['data'][] = $row['QuantitySold'];
 }

 echo json_encode($result);

Here is what I would do, note how I take the rows and store them differently than you currently do: 这是我要做的,请注意我如何处理行并以与当前不同的方式存储它们:

function get_data()
{
    $this->db->select('ItemName, QuantitySold');
    $query = $this->db->get('transactions');

    $results = array();

    foreach ($query->result_array() as $row)
    {
        $results[$row['ItemName']][] = $row['QuantitySold'];
    }

    $test = json_encode($results);
    echo $test;
    return $results;
}

Note that this isn't quite how you want the output, but it might be easier to process this way. 请注意,这并不是您想要的输出,但是以这种方式处理可能会更容易。

Output example: 输出示例:

{'shirt': [1, 2, 3], 'notshirt': [1, 2, 3]}

EDIT (for format): 编辑(用于格式):

function get_data()
{
    $this->db->select('ItemName, QuantitySold');
    $query = $this->db->get('transactions');

    $results = array();

    foreach ($query->result_array() as $row)
    {
        if(!isset($results[$row['ItemName']]))
            $results[$row['ItemName']] = array('name' => $row['ItemName'], 'data' => array());
        $results[$row['ItemName']]['data'][] = $row['QuantitySold'];
    }

    //Rekey arrays so they aren't associative
    $results = array_values($results);

    $test = json_encode($results);
    echo $test;
    return $results;
}

Output example: 输出示例:

{{name: 'shirt', data: [1, 2, 3], {'name': 'notshirt', data: [1, 2, 3]}}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM