对于我正在处理的图形,我正在尝试生成一个嵌套数组。我正在查询数据库,试图从我的数据库中的某一列获得所有的数据作为一个数组,但我真的不太确定如何做到这一点。目前它给我的最后一行在我的数据库。
下面是我的代码: 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;
}
生成如下结果:
{"name":"shirt","data":"9"}
我需要它看起来像这样:
{'name':'shirt','data':array(1, 2, 3,...)}
数据库结构:http://d.pr/i/cQaW
行:http://d.pr/i/8vp2
下面是我要做的,注意我是如何获取行并以不同于当前的方式存储它们的:
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;
}
请注意,这不是您想要的输出,但这样处理可能更容易。
输出示例:
{'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;
}
输出示例:
{{name: 'shirt', data: [1, 2, 3], {'name': 'notshirt', data: [1, 2, 3]}}
$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);