我正在尝试构建一个数组来为我的Graph提供数据。我使用下面的代码:
$rows = $this->Website_model->getGraphDataPositives();
$_rows = array();
$i = 0;
foreach ($rows as $key => $row) {
foreach ($row as $column => $value) {
$_rows[$i]['x'] = $value;
$_rows[$i]['y'] = $value;
$i++;
}
}
这导致以下响应:
array(48) {
[0]=>
array(2) {
["x"]=>
string(7) "3283581"
["y"]=>
string(7) "3283581"
}
[1]=>
array(2) {
["x"]=>
string(10) "2013-10-16"
["y"]=>
string(10) "2013-10-16"
}
所以它还不行......应该说:
array(48) {
[0]=>
array(2) {
["x"]=>
string(7) "3283581"
["y"]=>
string(7) "2013-10-16"
}
[1]=>
array(2) {
["x"]=>
string(10) "1512116"
["y"]=>
string(10) "2013-10-17"
}
任何人都可以告诉我需要调整什么才能获得正确的输出吗?
/////////////////////////////////
这是$ rows(输出的一部分)
的内容array(24) {
[0]=>
object(stdClass)#169 (2) {
["SUM(positive)"]=>
string(7) "3283581"
["DATE(stamp)"]=>
string(10) "2013-10-16"
}
[1]=>
object(stdClass)#160 (2) {
["SUM(positive)"]=>
string(7) "1512116"
["DATE(stamp)"]=>
string(10) "2013-10-17"
}
答案 0 :(得分:1)
如果我从SQL知道列名称会更容易,但这里是:
$rows = $this->Website_model->getGraphDataPositives();
$_rows = array();
foreach ($rows as $row) {
$_rows[] = array(
'x'=>$row['x-column-name-here'],
'y'=>$row['y-column-name-here']
);
}
答案 1 :(得分:1)
我认为这里的第一步是修复Codeigniter模型中的输出数组。你创建了:
$rows = $this->Website_model->getGraphDataPositives();
如果是这样,您应该能够轻松进入该函数并更改select语句的输出。
如果在函数getGraphDataPositives()中找到“SUM(正数)”和“DATE(标记)”,请将其更改为此(粗略示例,我不知道函数的外观):
SUM(positive) AS x
DATE(stamp) AS y
现在你可以这样运行:
$ rows = $ this-> Website_model-> getGraphDataPositives();
$ _ rows = array();
foreach ($rows as $i => $row) {
foreach ($row as $column => $value) {
$_rows[$i][$column] = $value;
}
}
另请注意,我删除了$ i = 0和$ i ++并用$ i替换了$ key。这样容易多了。
如果有帮助,请告诉我。
编辑:我不小心保留了第二个$ _rows [$ i] [$ column] = $ value;在那里;那不再需要了。您只需要一个,并且它的设置方式为两个条目设置相同的值。
编辑2:只是想注意上面的例子可能不是最好的选择,最好的选择是提供更多描述别名。
SUM(positive) AS positive
DATE(stamp) AS timestamp
然后设置如下值:
foreach ($rows as $i => $row) {
$_rows[$i]['x'] = $row->positive;
$_rows[$i]['y'] = $row->timestamp;
}
任何一个选项都可以使用,第一个选项稍微容易一点。
答案 2 :(得分:1)
foreach ($rows as $key => $row) {
// here $key is index, $row is the object
foreach ($row as $column => $value) {
// here $column will be "SUM(positive)" and the value will be 3283581
// for the first iteration. Since both are assigned $value
// $_rows[$i]['x'] and $_rows[$i]['y'] will be identical
$_rows[$i]['x'] = $value;
$_rows[$i]['y'] = $value;
$i++;
}
}
如果你只是使用你定义的对象列,你应该没问题:
foreach ($rows as $row) {
$_rows[$i]['x'] = $row->{'SUM(positive)'};
$_rows[$i]['y'] = $row->{'DATE(stamp)'};
}
你也没有使用$ key,所以也可以摆脱它。
答案 3 :(得分:0)
你的例子是基本的,但我认为这应该解决它的问题:
foreach ($rows as $key => $row) {
foreach ($row as $column => $value) {
$_rows[$key][$column%2==0?'x':'y'] = $value;
}
}
如果您正在使用PDO :: FETCH_NUM,即您的$行以数字方式编制索引。