2010-04-20 132 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']; 
    } 
}