代码之家  ›  专栏  ›  技术社区  ›  b. e. hollenbeck

在PHP中添加多维数组

  •  6
  • b. e. hollenbeck  · 技术社区  · 15 年前

    从数据库返回的数组如下:

    $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($_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 回复  |  直到 12 年前
        1
  •  6
  •   Adam Hopkinson    15 年前

    你想要的

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

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

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

        2
  •  3
  •   HoLyVieR    13 年前

    您需要在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
  •  0
  •   shfx    15 年前

    使用 reference -gt;

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