2010-04-20 131 views
6

我有一个数组的,看起来像这样的数据库返回:添加到多维数组在PHP

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

当然,这比我的大脑感知它容易。

这里是整个片段:(!那是它是什么)

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

      } 
     } 
+0

什么是'$ result'和'$ query'变量? – vooD 2010-04-20 20:34:09

回答

6

你想

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

$row将得到更好的命名为$key

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

3

你需要在的foreach的$值前面使用符号参照这样传递给它:

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 和&轻松修改 阵列的元素。这将分配参考 而不是复制该值。

+0

我接受了另一个答案,因为这是我为了自己的理智而去的,但是我给了你一个提升,因为它的工作原理也一样。 – 2010-04-20 20:43:05

0

使用reference - >

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