PHP

2010-04-16 8 views
38

में 2 सरणी को संयोजित नहीं कर सकता है मैंने हाल ही में PHP में + ऑपरेटर का उपयोग करके 2 एरे में शामिल होने का तरीका सीखा है।PHP

लेकिन इस कोड पर विचार ...

$array = array('Item 1'); 

$array += array('Item 2'); 

var_dump($array); 

आउटपुट

सरणी (1) {[0] => स्ट्रिंग (6) "आइटम 1"}

है

यह क्यों काम नहीं करता है? शॉर्टेंड छोड़ना और $array = $array + array('Item 2') का उपयोग करना या तो काम नहीं करता है। क्या चाबियों के साथ कुछ करना है?

+0

* (संबंधित) * http://stackoverflow.com/questions/2140090/operator-for-array-in-php/2140094#2140094 – Gordon

उत्तर

88

दोनों की 0 की कुंजी होगी, और सरणी के संयोजन की विधि डुप्लिकेट को ध्वस्त कर देगी। इसके बजाय array_merge() का उपयोग करने का प्रयास करें।

$arr1 = array('foo'); // Same as array(0 => 'foo') 
$arr2 = array('bar'); // Same as array(0 => 'bar') 

// Will contain array('foo', 'bar'); 
$combined = array_merge($arr1, $arr2); 

अपने सरणी में तत्वों विभिन्न चाबी इस्तेमाल किया जाता है, तो + ऑपरेटर अधिक उचित होगा।

$arr1 = array('one' => 'foo'); 
$arr2 = array('two' => 'bar'); 

// Will contain array('one' => 'foo', 'two' => 'bar'); 
$combined = $arr1 + $arr2; 

संपादित करें: जोड़ा स्पष्ट करने के लिए

+12

ध्यान दें कि array_merge फ़ंक्शन अभी भी गैर-न्यूमेरिक सरणी कुंजियों के डुप्लिकेट को ध्वस्त कर देगा। उदाहरण के लिए array_merge (सरणी ("रंग" => "लाल"), सरणी ("रंग" => "हरा")) सरणी ("रंग" => "हरा) का मान उत्पन्न करेगी; –

+0

$ arr1 = array (' foo '); // सरणी के समान (0 =>' foo ') $ arr2 = array (' bar '); // सरणी के रूप में समान (0 =>' बार ') // इसमें सरणी (' बार '); $ संयुक्त = array_merge ($ arr1, $ arr2); –

-3

कोशिश कह

$array[] = array('Item 2'); 

हालांकि ऐसा लगता है कि आप, $array[][] एक सरणी में एक सरणी जोड़ने की कोशिश कर रहे हैं इस प्रकार है, लेकिन है कि क्या नहीं अपने शीर्षक से पता चलता है।

+2

वही बात नहीं है। आपको 'सरणी' ('आइटम 1', सरणी ('आइटम 2')) ', एक बहुआयामी सरणी मिलेगी। – deceze

+1

ठीक है, जो मैंने सोचा था कि वह चाहता था। –

7

उपयोग array_merge()
दस्तावेज़ यहां देखें एक कोड का टुकड़ा:
http://php.net/manual/en/function.array-merge.php

एक या अधिक सरणियों के तत्वों को एक साथ मर्ज कर देता ताकि मूल्यों इनमें से एक को पिछले एक के अंत में जोड़ा जाता है। यह परिणामी सरणी देता है।

3

array_merge आज़माएं।

$array1 = array('Item 1'); 

$array2 = array('Item 2'); 

$array3 = array_merge($array1, $array2); 

मुझे लगता है कि इसकी वजह से आप या तो के लिए एक महत्वपूर्ण बताए नहीं कर रहे हैं, ताकि वे दोनों 0 की कुंजी है, और + फिर से सूचकांक नहीं है, इसलिए इसके साथ यह लिखने की कोशिश कर।

2
$array = array('Item 1'); 

array_push($array,'Item 2'); 

या

$array[] = 'Item 2'; 
6

+ संघ ऑपरेटर है, जो एक संयोजन ऑपरेटर से अलग है (PHP सरणियों के लिए एक नहीं है) कहा जाता है। description स्पष्ट रूप से कहते हैं:

+ ऑपरेटर, बाएं हाथ का अधिकार सौंप दिया सरणी से शेष चाबियों का तत्व जोड़ देती है, जबकि डुप्लीकेट कुंजियों ओवरराइट नहीं कर रहे हैं।

उदाहरण के साथ:

$a = array("a" => "apple", "b" => "banana"); 
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry"); 
$c = $a + $b; 

array(3) { 
    ["a"]=> 
    string(5) "apple" 
    ["b"]=> 
    string(6) "banana" 
    ["c"]=> 
    string(6) "cherry" 
} 

के बाद से दोनों अपने सरणियों कुंजी 0 के साथ एक प्रविष्टि है, तो परिणाम की उम्मीद है।

समेकित करने के लिए, array_merge का उपयोग करें।

2

यह वास्तव में एक महत्वपूर्ण संघर्ष है। सरणी को संयोजित करते समय, डुप्लिकेट कुंजी ओवरराइट नहीं की जाती हैं।

इसके बजाय आप का उपयोग करना चाहिए array_merge()

$array = array_merge(array('Item 1'), array('Item 2')); 
6

सभी पिछले जवाब गलत कर रहे हैं! विलय वास्तव में सरणी विलय करता है, जिसका अर्थ है कि यदि सरणी में एक सामान्य वस्तु है तो प्रतियों में से एक को छोड़ा जाएगा। संघ के लिए भी चला जाता है।

मैं वास्तव में मैन्युअल रूप से ऐसा एक "काम के आसपास" इस समस्या के लिए, लेकिन करने के लिए नहीं मिला ...

यहाँ यह जाता है:

<?php 
$part1 = array(1,2,3); 
echo "array 1 = \n"; 
print_r($part1); 
$part2 = array(4,5,6); 
echo "array 2 = \n"; 
print_r($part2); 
$ans = NULL; 
for ($i = 0; $i < count($part1); $i++) { 
    $ans[] = $part1[$i]; 
} 
for ($i = 0; $i < count($part2); $i++) { 
    $ans[] = $part2[$i]; 
} 
echo "after arrays concatenation:\n"; 
print_r($ans); 
?> 
+12

यह गलत है।' array_merge' केवल परिणामी सरणी से आइटम छोड़ देगा यदि वे एक ही कुंजी के साथ _associative_ arrays हैं। संख्यात्मक सरणी के लिए, _all_ आइटम हैं एक नई सरणी में विलय, जिसका लंबाई मूल सरणी का सटीक योग है। उदाहरण में आप संख्यात्मक सरणी का उपयोग कर रहे हैं, जिसका अर्थ है 'array_merge' आपके लिए बेकार ढंग से काम करेगा। मैं मानता हूं कि 'array_merge' का उपयोग नहीं किया जाना चाहिए सहयोगी सरणी, लेकिन स्पष्ट रूप से यह नहीं है कि आप यहां क्या दिखा रहे हैं । – JMTyler

+0

@JMTyler +1 उत्कृष्ट टिप्पणी! मुझे एक उदाहरण चुना जाना चाहिए जो सहयोगी सरणी का उपयोग करता हो। इस जवाब को पोस्ट करने का मुख्य कारण यह था कि स्वीकार किए गए उत्तर का उपयोग '+' किया जाता है जिसे किसी भी मामले (सहयोगी या नहीं) में उपयोग नहीं किया जाना चाहिए जब तक कि चाबियाँ अलग न हों। और array_merge जिसमें समान वस्तुओं के मामले में डुप्लिकेट आइटम होंगे। – alfasin

+1

"सभी पिछले उत्तर गलत हैं" वोट के आधार पर उत्तरों को पुन: व्यवस्थित नहीं किया जाता है। –

-5

आप ऑपरेटर का उपयोग कर सकते हैं। $ array3 = $ array1। $ Array2;

+2

यह एक संक्षिप्त ऑपरेटर है। आप कुछ नोटिस और "ArrayArray" के साथ समाप्त हो जाएगा। –