在PHP中添加到多维数组

时间:2010-04-20 20:30:16

标签: php mysql arrays

我有一个从数据库返回的数组,如下所示:

$data = array(201 => array('description' => blah, 'hours' => 0),
              222 => array('description' => feh, 'hours' => 0);

在下一段代码中,我使用foreach并检查另一个表中的密钥。如果下一个查询返回数据,我想用新的小时值更新该键的数组中的'hours'值:

foreach ($data as $row => $value){
   $query = $db->query('SELECT * FROM t WHERE id=$row');
   if ($result){
      $value['hours'] = $result['hours'];
   }

除了我已经尝试了foreach循环的每个声明组合之外,一切都很好,但我不断得到$value['hours']是无效引用的错误。我已经尝试声明$value[] ......但这也不起作用。我不需要遍历$value,因此不需要另一个foreach循环。

当然,这比我的大脑感觉更容易。

以下是整个片段:

foreach($_gspec as $key => $value){

            $sql = sprintf('SELECT * FROM List WHERE specialtyID=%s', $key);
            $query = $db->query($sql);

            if ($query->num_rows() !== 0){

                $result = $query->row_array();
                $value['hours'] = $result['hours'];

            }
        }

3 个答案:

答案 0 :(得分:6)

你想要

$data[$row]['hours'] = $result['hours']

$row最好命名为$key(就是这样!)

有些人会建议使用指针,但我发现这种方式对我来说更有意义。

答案 1 :(得分:3)

你需要在foreach中的$ value前面使用&符号来通过引用传递它,如下所示:

foreach ($data as $row => &$value){
   $query = $db->query($sql);
   if ($result){
      $value['hours'] = $result['hours'];
   }
}

此处有更多信息:http://php.net/manual/en/control-structures.foreach.php

  

从PHP 5开始,您可以轻松修改   数组前面的$ value元素   与&amp ;.这将指定参考   而不是复制价值。

答案 2 :(得分:0)

使用reference - >

foreach ($data as $row => & $value) {
   $query = $db->query('SELECT * FROM t WHERE id=$row');
   // [...]
   if ($result) {
      $value['hours'] = $result['hours'];
   }
}