2010-04-20 30 views
6

में एक बहुआयामी सरणी को जोड़ना मैं एक सरणी है डेटाबेस ऐसा इसलिए लग रहा है से लौटा जा रहा है:पीएचपी

$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

उत्तर

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 के रूप में, आप कर सकते हैं आसानी से सरणी के तत्वों को से पहले & के साथ संशोधित करें। यह मूल्य की प्रतिलिपि बनाने के बजाय संदर्भ असाइन करेगा।

+0

मैंने दूसरे जवाब को स्वीकार कर लिया क्योंकि मैं अपनी खुद की सैनिटी के लिए गया था, लेकिन मैंने आपको एक उपहास दिया क्योंकि यह भी काम करता है। –

0

उपयोग reference ->

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