在PHP中向多维数组添加元素

6

我有一个从数据库返回的数组,看起来像这样:

$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'];

            }
        }

$result$query 变量是什么? - vooD
3个回答

6

你想要的是

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

$row 最好改名为 $key(这才是它的含义!)

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


3

您需要在foreach循环中在$value前面使用&符号将其作为引用传递,如下所示:

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

更多信息请访问:http://php.net/manual/zh/control-structures.foreach.php

从 PHP 5 开始,您可以通过在 $value 前加上 & 来轻松修改数组元素。这将分配引用而不是复制该值。


我接受了其他答案,因为那是我自己的选择,但我给了你一个赞,因为这个也同样有效。 - b. e. hollenbeck

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接