2010-04-20 13 views
6

Mam tablicę zwracane z bazy danych, która wygląda tak:Dodawanie do wielowymiarowej tablicy w PHP

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

W następnym kawałku kodu, używam foreach i sprawdzanie klucza w innej tabeli. Jeśli kolejna kwerenda zwraca dane, chcę zaktualizować wartość „godzin” w tablicy, że kluczowe z nową wartością godzin:

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

To wszystko jest w porządku z wyjątkiem, że próbowałem dla prawie każdy kombinacji deklaracji pętla foreach, ale wciąż pojawia się błąd, że $value['hours'] jest nieprawidłowym odwołaniem. Próbowałem już zadeklarować $value[] ... ale to też nie działa. Nie muszę wykonywać iteracji przez $value, więc kolejna pętla foreach nie jest konieczna.

Z pewnością jest to łatwiejsze niż mój mózg go postrzega.

Oto cały fragment: (!, Że to co to jest)

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

Jakie są '$ result' i' $ zmienne query'? – vooD

Odpowiedz

6

Chcesz

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

$row lepiej byłoby nazwane $key

Niektórzy ludzie sugerowałyby za pomocą wskaźników, ale uważam, że ten sposób ma dla mnie więcej sensu.

3

Trzeba użyć znaku & przed wartością $ w foreach przekazać go przez odniesienie tak:

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

Więcej informacji tutaj: http://php.net/manual/en/control-structures.foreach.php

Od PHP 5, można łatwo modyfikuj elementy tablicy , poprzedzając $ wartość z &. Przypisuje to odniesienie zamiast kopiować wartość.

+0

Zaakceptowałem drugą odpowiedź, ponieważ właśnie to zrobiłem dla mojego własnego zdrowia psychicznego, ale dałem ci eksces, ponieważ to działa równie dobrze. –

0

Zastosowanie reference ->

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