2013-05-10 11 views
13

का उपयोग करके सरणी के सरणी में मूल्य डालें मेरे पास एक बहुत ही बुनियादी सवाल है लेकिन मैं अटक गया हूं। मैं बहुत php के लिए नया हूँ और मैं इस तरह की एक सरणी है:php डालने का मूल्य फ़ोरैच

$array = array(
    'one' => 1, 
    'two' => array('key1' => 'val1','key2' => 'val2'), 
    'three' => array('key1' => 'val1','key2' => 'val2'), 
    'four' => array('key1' => 'val1','key2' => 'val2') 
); 

और सरणी में सरणियों से प्रत्येक के लिए (जो है, 'दो,' तीन ', और' चार '), मैं चाहता हूँ करने के लिए उन सरणी में 'key3' => 'val3' डालें।

foreach($array as $item) { 
    if (gettype($item) == "array") { 
     $item['key3'] = 'val3'; 
    } 
} 

लेकिन यह काम नहीं करता है, और मुझे यकीन है कि क्यों नहीं कर रहा हूँ:

मैं इस कोशिश की। विभिन्न प्रिंट_आर के पूरे स्थान पर, ऐसा लगता है कि अगर मैं लूप में इसे प्रिंट करता हूं तो यह 'key3' => 'val3' $ आइटम में डालने लगता है, लेकिन मूल सरणी अपरिवर्तित प्रतीत होती है। मैंने नियमित रूप से लूप के लिए भी कोशिश की लेकिन वह भी काम नहीं करता था।

+0

कुंजी करो और अपने मूल्य प्रत्येक उप सरणी के लिए बराबर होती हैं? – SaidbakR

+0

उत्सुक क्यों आपने 'foreach ($ array_key => $ item के रूप में $ array) {$ array [$ item_key] [' key3 '] =' val3 'नहीं किया; } ' – westcoast

उत्तर

20

foreach काम करता है, तो आप foreach अंदर अपने मूल सरणी को संशोधित नहीं कर सकते हैं: इसका उपयोग करें। इसके आसपास काम करने का एक तरीका & ऑपरेटर का उपयोग करना है।

foreach($array as &$item) { 
    if (is_array($item)) { 
     $item['key3'] = 'val3'; 
    } 
} 

एक और, और अधिक सुरुचिपूर्ण रास्ता array_walk() उपयोग करने के लिए होगा:

array_walk($array, function (&$v, $k) { 
    if (is_array($v)) { 
     $v['key3'] = 'val3'; 
    } 
}); 

यह उदाहरण पीएचपी 5.3, जहां क्लोजर शुरू किए गए थे से काम करेंगे।

+0

$ आइटम केवल लूप के लिए जेनरेट किया गया है। आपका मतलब है '& $ सरणी [' key3 '] =' val3 '; '! –

+0

@ moskito-x मैं निश्चित रूप से जो मैंने लिखा था उसका मतलब है। यही बात है। मैंने जुड़े 'foreach' मैन्युअल पृष्ठ को चेक करें। – kapa

+0

$ आइटम बदलने के लिए बेकार है। अगले लूप द्वारा हमेशा ओवरराइट किया जाएगा। –

0

PHP में एक फ़ंक्शन है यह जांचने के लिए कि कोई चर एक सरणी है या नहीं: is_array()$item की एक प्रति के साथ

if (is_array($item)) { ... 
0

तरह foreach उपयोग कुंजी के साथ पाशन जबकि:

foreach($array as $key => $item){ 

    $array[$key]['newElement'] = "newValue"; 

} 
+1

हालांकि सवाल का जवाब नहीं, इसने मुझे '$ कुंजी' शब्द और' $ आइटम' के बीच संबंधों को बेहतर ढंग से समझने में मदद की। –

संबंधित मुद्दे