1

我正在尝试构建一个数组来提供我的图表。我使用下面的代码:

$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"
  }
4

4 回答 4

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']
    );
}   
于 2013-11-08T20:00:03.320 回答
1

我认为这里的第一步是从 Codeigniter 模型中修复您的输出数组。您是否创建了:

$rows = $this->Website_model->getGraphDataPositives();

如果是这样,您应该能够轻松地进入函数并更改 select 语句的输出。

在函数getGraphDataPositives()中找到“SUM(positive)”和“DATE(stamp)”的地方,把它改成这个(粗略的例子,我不知道函数长什么样):

SUM(positive) AS x
DATE(stamp) AS y

现在你可以这样运行它:

$rows = $this->Website_model->getGraphDataPositives();

$_rows = 数组();

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;
}

任何一个选项都可以,第一个更容易一些。

于 2013-11-08T20:10:21.063 回答
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 ,所以也可以摆脱它。

于 2013-11-08T20:18:28.037 回答
0

你的例子有点基本,但我认为这应该解决它的问题:

foreach ($rows as $key => $row) {
    foreach ($row as $column => $value) {
        $_rows[$key][$column%2==0?'x':'y'] = $value;
    }
}  

如果您使用的是 PDO::FETCH_NUM,即您的 $rows 是数字索引的。

于 2013-11-08T20:03:28.187 回答