将键添加到php数组

时间:2013-11-08 19:53:11

标签: php codeigniter

我正在尝试构建一个数组来为我的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"
  }

4 个答案:

答案 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,即您的$行以数字方式编制索引。