দুটি অ্যারে একত্রিত করুন


91

আমার দু'টি অ্যারে রয়েছে:

array( 
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44'
);

array( 
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);

আমি এই দুটি অ্যারে এমনভাবে সংযুক্ত করতে চাই যাতে এতে সদৃশ থাকে না এবং পাশাপাশি তাদের মূল কীগুলি রাখা হয়। উদাহরণস্বরূপ আউটপুট হওয়া উচিত:

array( 
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);

আমি এটি চেষ্টা করেছি তবে এটি তাদের মূল কীগুলি পরিবর্তন করছে:

$output = array_unique( array_merge( $array1 , $array2 ) );

কোন সমাধান?

উত্তর:


165

শুধু ব্যবহার করুন:

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

এটি সমাধান করা উচিত। কারণ আপনি যদি স্ট্রিং কী ব্যবহার করেন তবে যদি একটি কী একাধিকবার ঘটে থাকে (যেমন'44' আপনার উদাহরণের মতো) একটি কী একই নামযুক্ত প্রসেসিংগুলি ওভাররাইট করে। কারণ আপনার ক্ষেত্রে উভয়ের উভয়েরই সমান মূল্য রয়েছে তবে এটি কোনও বিষয় নয় এবং এটি নকলগুলিও সরিয়ে ফেলবে।

আপডেট: আমি ঠিক বুঝতে পেরেছি যে পিএইচপি সংখ্যার স্ট্রিং-কীগুলিকে সংখ্যা (পূর্ণসংখ্যার) হিসাবে গণ্য করে এবং তাই এরকম আচরণ করবে, এর অর্থ কী, এটি কীগুলিও নাম্বার করে ...

চাবিগুলি পুনরায় তৈরি করা একটি কার্যপ্রণালী।

$output = array_combine($output, $output);

আপডেট 2: আমি সর্বদা ভুলে যাই, সেখানে অপারেটরও রয়েছে (সাহসীভাবে, কারণ এটি যা আপনি খুঁজছেন তা সত্যই !: ডি)

$output = $array1 + $array2;

এই সমস্তগুলিতে দেখা যাবে: http://php.net/manual/en/function.array- विस..pp


4
@KingCrunch - যদিও সংখ্যার কথা বলা হচ্ছে, যারা না স্ট্রিং কী ও তাই সূচক হবে না সংরক্ষিত করা। উদাহরণ: ideone.com/I2NFT
ব্রেন্ডন বুলেন

4
সত্যিই ... প্রথমে আমি "বাগ" সম্পর্কে কথা বলতে চেয়েছিলাম, কিন্তু তখন আমি লক্ষ্য করেছি, ম্যানুয়ালটিতে "সংখ্যার কীগুলি" সম্পর্কে কথা বলা হয়, "পূর্ণসংখ্য কী" নয়। কিছুটা বিভ্রান্ত লাগছে।
কিংক্রাচ

+1 আমি অপারেটর সম্পর্কে ভুলে গেছি! দুর্দান্ত (সেই অংশটি সাহসী করুন!))
ব্রেন্ডন বুলেন

4
সুতরাং সংমিশ্রণের $array1 + $array2পরিবর্তে সংক্ষিপ্ত এবং দক্ষ সমাধানarray_merge() - array_combine()
আওয়ান

4
সতর্কতা! অ-অ্যাসোসিয়েশন অ্যারেগুলির জন্য বা অ্যারেগুলির সাধারণ কী থাকলে$a + $b != array_merge($a, $b)
jmarceli

33

আপনি এটি বিবেচনা করা উচিত $array1 + $array2 != $array2 + $array1

$array1 = array(
'11' => 'x1',
'22' => 'x1' 
);  

$array2 = array(
'22' => 'x2',
'33' => 'x2' 
);

সঙ্গে $ বিন্যাস 1 + + $ বিন্যাস 2

$array1 + $array2 = array(
'11' => 'x1',
'22' => 'x1',
'33' => 'x2'
);

এবং $ অ্যারে 2 + $ অ্যারে 1 সহ

$array2 + $array1 = array(  
'11' => 'x1',  
'22' => 'x2',  
'33' => 'x2'  
);

25

এইটা কাজ করে:

$output = $array1 + $array2;

12
আমি এটির সুপারিশ করব না কারণ এটির আচরণটি অত্যন্ত [1,2,3] + [4,5,6] == [1,2,3]
অনাদায়ী

@ জেচুক আপনি কি সুপারিশ করেন?
মিশাস

ধন্যবাদ এটি আমার দরকার ছিল। এখানে কেন: http_build_query(array_merge($array1, $array2))আমার পক্ষে কাজ করে নি, যেখানে হয়েছে http_build_query($array1 + $array2)
ব্যারিমোড

4

এটি করার জন্য, আপনি একটির মধ্য দিয়ে লুপ করতে পারেন এবং অন্যটিতে সংযোজন করতে পারেন:

<?php

$test1 = array( 
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44'
);

$test2 = array( 
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);


function combineWithKeys($array1, $array2)
{
    foreach($array1 as $key=>$value) $array2[$key] = $value;
    asort($array2);
    return $array2;
} 

print_r(combineWithKeys($test1, $test2));

?>

আপডেট: কিং ক্রাঞ্চ সেরা সমাধান নিয়ে এসেছিল :print_r($array1+$array2);


2

আপনি যদি পিএইচপি 7.4 বা তার বেশি ব্যবহার করে থাকেন ...তবে আপনি পিএইচপি ডক্স থেকে নিম্নলিখিত উদাহরণ হিসাবে স্প্রেড অপারেটরটি ব্যবহার করতে পারেন :

$arr1 = [1, 2, 3];
$arr2 = [...$arr1]; //[1, 2, 3]
$arr3 = [0, ...$arr1]; //[0, 1, 2, 3]
$arr4 = array(...$arr1, ...$arr2, 111); //[1, 2, 3, 1, 2, 3, 111]
$arr5 = [...$arr1, ...$arr1]; //[1, 2, 3, 1, 2, 3]

function getArr() {
  return ['a', 'b'];
}
$arr6 = [...getArr(), 'c']; //['a', 'b', 'c']

$arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; //['a', 'b', 'c']

function arrGen() {
    for($i = 11; $i < 15; $i++) {
        yield $i;
    }
}
$arr8 = [...arrGen()]; //[11, 12, 13, 14]

এটি জাভাস্ক্রিপ্ট ইএস 6 এর মতো কাজ করে।

Https://wiki.php.net/rfc/spread_operator_for_array এ আরও দেখুন ।


এটি প্রশ্নের ক্ষেত্রে প্রযোজ্য নয়। ওপিতে অ্যারের জন্য স্ট্রিং কী রয়েছে (এটি স্প্রেড অপারেটরের সাথে কাজ করে না) এবং ওপি কীগুলি সংরক্ষণ করতে চায় (স্প্রেড অপারেটর কীগুলি ছুঁড়ে ফেলে)। এছাড়াও ওপি সদৃশ চায় না
মার্টি

ওহ আমি আপনার পয়েন্ট দেখুন। এটা সত্য, এবং আপনি ঠিক বলেছেন। অন্যান্য লোকদের জন্য আমার উত্তরকে উন্নত করতে সহায়তা করতে আপনি কিছু কোড সরবরাহ করতে পারেন? আমি আপনার সময় প্রশংসা করি! আমার উত্তরের ত্রুটিগুলি নির্দেশ করার জন্য আপনাকে অনেক ধন্যবাদ।
বিজ্ঞানের শিক্ষার্থী

আমি মনে করি না স্প্রেড অপারেটর এখানে যাওয়ার উপায়। পরিবর্তে প্রদত্ত উত্তরটি ব্যবহার করুন$array1 + $array2
মার্ত্তি

আমি এই সম্পর্কে সচেতন ছিল না! মানে আমি জানি না যে আমরা কী করতে পারি $ouput = $array1 + $array2we এখন আমি নতুন কিছু শিখেছি! ধন্যবাদ!
বিজ্ঞানের শিক্ষার্থী

1

এইটা কাজ করে:

$a = array(1 => 1, 2 => 2, 3 => 3);
$b = array(4 => 4, 5 => 5, 6 => 6);
$c = $a + $b;
print_r($c);

1

সতর্কতা! $ অ্যারে 1 + $ অ্যারে 2 কীগুলি ওভাররাইট করে, তাই আমার সমাধান (বহুমাত্রিক অ্যারেগুলির জন্য) অ্যারে_উনিক ব্যবহার করা হয় ()

array_unique(array_merge($a, $b), SORT_REGULAR);

বিজ্ঞপ্তি:

5.2.10+ এর ডিফল্ট মান sort_flagsSORT_STRING এ ফিরে গেছে।

5.2.9 ডিফল্ট হ'ল SORT_REGULAR।

5.2.8- ডিফল্ট হ'ল SORT_STRING

এটি পুরোপুরি কাজ করে । আশা করি এটিও একইভাবে সাহায্য করবে।


4
array_merge()কীগুলি সংরক্ষণ করে না এর দ্বারা তৈরি অ্যারে 0 সূচকযুক্ত।
এইচপিয়ার্স

@ এইচপিয়ার্স ভাল, বহুমাত্রিক অ্যারে সংযোজন ক্ষেত্রে কিছু তথ্য ব্যবহার করে হারিয়ে যাবে +। একবার দেখুন: পিএইচপিফিডাল , $ বি [0] হারিয়ে যাবে ...
নরম্যান এড্যান্স

1

পিএইচপি 7.4 দিয়ে এটি করার নতুন উপায় হ'ল স্প্রেড অপারেটর [...]

$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump($fruits);

স্প্রেড অপারেটরের তুলনায় আরও ভাল পারফরম্যান্স থাকা উচিত array_merge

স্প্রেড অপারেটরের একটি উল্লেখযোগ্য সুবিধা হ'ল এটি কোনও ট্র্যাভারেবল অবজেক্টকে সমর্থন করে, যখন অ্যারে_মিটার ফাংশন কেবল অ্যারেগুলিকে সমর্থন করে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.