【问题标题】:Adding to a multidimensional array in PHP在 PHP 中添加到多维数组
【发布时间】:2011-02-10 07:50:53
【问题描述】:

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

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

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

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 循环。

这肯定比我的大脑想象的要容易。

这是整个sn-p:

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 变量?

标签: php mysql arrays


【解决方案1】:

你想要

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

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

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

【讨论】:

    【解决方案2】:

    你需要在 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 和 &。这将分配参考 而不是复制值。

    【讨论】:

    • 我接受了另一个答案,因为那是我为了自己的理智而选择的,但我给了你一个提升,因为这同样有效。
    【解决方案3】:

    使用reference ->

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

    【讨论】:

      猜你喜欢
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 2011-01-07
      • 2019-05-30
      • 2021-12-29
      • 2019-05-30
      • 1970-01-01
      相关资源
      最近更新 更多