অ্যারে_মার্জ এবং অ্যারে + অ্যারের মধ্যে পার্থক্য কী?


116

মোটামুটি সহজ প্রশ্ন। এর মধ্যে পার্থক্য কী:

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

এবং

$merged = $array1 + $array2;

?



3
সম্ভবত গর্ডন মিস করেছেন যে শিরোনামটিতে অ্যারে_ড্র্যাম না থাকায়।
পিক্সেল বিকাশকারী

উত্তর:


73

পার্থক্য হল:

+অপারেটর, দুইটি অ্যারের ইউনিয়ন লাগে যেহেতু array_mergeফাংশন ইউনিয়ন লাগে কিন্তু ডুপ্লিকেট চাবি ওভাররাইট হয়।


সুতরাং, এই 2: অ্যারে_মিটার , প্লাস চিহ্নের মধ্যে পার্থক্য কী (যদিও আমাকে অ্যারেগুলি ঘুরে দেখতে হয়েছিল)?
জোসেফ সিলবার

15
এখানে নতুনদের জন্য সাবধানতার কথা, উভয় ক্ষেত্রেই অপারেশনের ফলাফল শূন্য হয় যদি অ্যারেগুলির কোনও একটি শূন্য হয় । কেউ কেউ এটি ধরে নেওয়ার বিষয়ে ধারণা করছেন না যেহেতু এটি ইউনিয়ন অপারেশন, ফলস্বরূপ (নাল-নাল) অ্যারে যদি তাদের কোনওটি শূন্য হয় তবেই হবে । তবে, এটি ঠিক রাখে যদি অ্যারেগুলির মধ্যে একটি শূন্য অ্যারে হয়। সুতরাং, একটি ভাল অনুশীলন হিসাবে, আমি মনে করি, আমাদের ইনপুট অ্যারেগুলি খালি অ্যারে হিসাবে শুরু করা উচিত। তোমরা কি বলো?
সন্দীপন নাথ

6
ডুপ্লিকেট চাবি, "ইউনিয়ন গ্রহণ" থাকে তাহলে সবসময় হবে আছে তাদের মধ্যে একজন পরিত্রাণ পেতে। পার্থক্য কোন এক।
Alexis

5
দুঃখিত, এই উত্তরটি বিভ্রান্তিকর, ভুল এবং অসম্পূর্ণ। : -ও বিভ্রান্তিকর বিট সম্পর্কিত @ অ্যালেক্সিসের মন্তব্য দেখুন (যদিও তিনি ওপি সম্পর্কিত সত্যের অর্ধেক অংশও রয়েছেন)। 2. দেখুন Yehosef এর উত্তর কী array_merge আসলে না ... 3. আর দেখতে BoltClock এর উত্তর : অন্য গুরুত্বপূর্ণ পার্থক্য এখানে উল্লেখ করা সম্পর্কে array_mergeরিসেট সাংখ্যিক কি, অসদৃশ +
জেড

মোটেই নির্দিষ্ট নয় সহায়ক নয়. পার্থক্যটি হাইলাইট করে না। একটি ব্যাখ্যা খুব উচ্চ স্তরের।
আহ্নবিজক্যাড

90

এখানে একটি সাধারণ চিত্রণমূলক পরীক্ষা:

$ar1 = [
   0  => '1-0',
  'a' => '1-a',
  'b' => '1-b'
];


$ar2 = [
   0  => '2-0',
   1  => '2-1',
  'b' => '2-b',
  'c' => '2-c'
];

print_r($ar1+$ar2);

print_r(array_merge($ar1,$ar2));

ফলাফল সহ:

Array
(
  [0] => 1-0
  [a] => 1-a
  [b] => 1-b
  [1] => 2-1
  [c] => 2-c
)
Array
(
  [0] => 1-0
  [a] => 1-a
  [b] => 2-b
  [1] => 2-0
  [2] => 2-1
  [c] => 2-c
)

লক্ষ্য করুন যে সদৃশ অ-সংখ্যাসূচক কীগুলি ইউনিয়ন অপারেটর ব্যবহার করে প্রথম মানটি গ্রহণ করবে তবে পরেরটি অ্যারে_ডর্ম ব্যবহার করে।

সংখ্যার কীগুলির জন্য, প্রথম মানটি ইউনিয়ন অপারেটরের সাথে ব্যবহার করা হবে যেখানে সমস্ত মানগুলি অ্যারে_ড্র্যামের সাথে ব্যবহৃত হবে, কেবল পুনর্নির্মাণ করা হবে।

আমি সাধারণত সংঘবদ্ধ অ্যারেগুলির জন্য ইউনিয়ন অপারেটর এবং সংখ্যার জন্য অ্যারে_ডর্ম ব্যবহার করি। অবশ্যই, আপনি কেবল সাহসী হিসাবে অ্যারে_ডর্ম ব্যবহার করতে পারেন, কেবল যে পরবর্তী মানগুলি পূর্বের মানগুলি ওভাররাইট করে।


52

array_merge()ইনপুট অ্যারেগুলিতে পাওয়া সমস্ত সংখ্যক কীগুলি ফলাফলের অ্যারেতে পুনরায় সূচিযুক্ত করে তোলে। ইউনিয়ন অপারেটর +পুনর্নির্মাণের কারণ নয়।


29

অ্যারে_মিটার বনাম প্লাস

উৎস: https://softonsofa.com/php-array_ विसरा- array_replace- plus- union/

অ্যারে_মিটার (a ডিফল্ট, $ বিকল্প) ব্যবহার বন্ধ করুন:

function foo(array $options)
{
   $options += ['foo' => 'bar'];

   // ...
}

দ্রষ্টব্য : অ্যারে_রেপ্লেস ফাংশন PHP5.3 থেকে বিদ্যমান।


কেন আমরা অ্যারে_মিটার ($ ডিফল্ট, $ বিকল্পগুলি) ব্যবহার বন্ধ করব?: কারণ এটি নন-ইনডেক্সড কীগুলি বাতিল করে?
অহনিবিজ্যাকড

কিন্তু উত্তর সত্যিই নীতিমূলক +1 করুন
SNR

20

+ চিহ্নটি কেবল অ্যারের কী এর প্রথম উপস্থিতি থেকে মান গ্রহণ করে ।
অ্যারে_মিটার শেষ থেকে মান নেয় একটি অ্যারের কী উপস্থিতি ।

উদাহরণ:

$first = ['a'=>'one',
        'b'=>'two',
        'c'=>'three'];

$second = ['a'=>'fourth',
        'b'=>'fifth',
        'c'=>'sixth',
        '3'=>'number three'];

$merged = $first + $second;
echo "<pre> plus sign merge\n";
var_dump($merged);

$merged = array_merge($first,$second);
echo "\n array_merge function merge\n";
var_dump($merged);

এই ফলাফলগুলি:

প্লাস সাইন মার্জ
অ্যারে (4) {
["a"] =>
স্ট্রিং (3) "এক"
["বি"] =>
স্ট্রিং (3) "দুই"
["সি"] =>
স্ট্রিং (5) "তিন"
[3] =>
স্ট্রিং (12) "তিন নম্বর"
}

অ্যারে_স্ট্রিম ফাংশনটি মার্জ
অ্যারে (4) {
["a"] =>
স্ট্রিং (6) "চতুর্থ"
["বি"] =>
স্ট্রিং (5) "পঞ্চম"
["সি"] =>
স্ট্রিং (5) "ষষ্ঠ"
[0] =>
স্ট্রিং (12) "তিন নম্বর"
}

এটিতে লক্ষণীয় আকর্ষণীয় হ'ল array_mergeকার্যত তিনটি সংখ্যার '3' সূচকটি মুছে ফেলা হলেও এটি একটি স্ট্রিং, কারণ এটি একটি সংখ্যা।

সুতরাং array_mergeসংখ্যার সূচকগুলির সাথে অ্যারেগুলিতে মার্জ করার সময় যত্ন নিন । তারা তাদের চাবি হারিয়ে যেতে পারে। যদি সেগুলি আপনার কাছে গুরুত্বপূর্ণ থাকে তবে তাদের সাথে একটি স্ট্রিং আগে রেখে দিন।

পরিবর্তে '3' => 'three'মত কিছু ব্যবহার করুন'_3' => 'three'


5
" যদিও এটি একটি স্ট্রিং, কারণ এটি একটি সংখ্যা " +1 :-)
E2-e4

5

আমি বিশ্বাস করি যে array_mergeঅনুলিপিযুক্ত অ-সংখ্যাসূচক কীগুলি ওভাররাইট $array1 + $array2করে while


3

তবুও অন্য একটি উদাহরণ (সুস্পষ্ট কী ব্যতীত অ্যারে; এটি অপারেটর +এবং কীভাবে array_mergeকাজ করবে সে সম্পর্কে স্পষ্টতই , তবে "স্পষ্ট" জিনিসগুলি যখন দেখা যায় তখন সহজ হয়;))

$a = array('apple');
$b = array('orange', 'lemon');

echo '$a + $b = ';             print_r($a + $b);
echo 'array_merge($a, $b) = '; print_r(array_merge($a, $b));

দিতে হবে:

$a + $b = Array
(
    [0] => apple
    [1] => lemon
)
array_merge($a, $b) = Array
(
    [0] => apple
    [1] => orange
    [2] => lemon
)

0

দয়া করে অন্য পার্থক্যের জন্য মনোযোগ দিন: ইউনিয়ন (+) খালি মান (একই কী বিবেচনা করে) নন-ফাঁকা মানকে ওভাররাইট করতে পারবে না, তবে অ্যারে_জমিয়ার করবে:

$a = array('foo' => 'bar');
$b = array('foo' => ''); // or false or 0

print_r($a+$b);
print_r(array_merge($a, $b);

ফলাফল:

Array
(
    [foo] => bar
)
Array
(
    [foo] => 0
)

0

সুতরাং স্পষ্টতই যদি আপনি উভয় ইউনিয়ন অর্ডার পরিবর্তন করেন এবং মার্জ একই জিনিসটি করে

$a = array('foo' => 'bar', 'x' => 'fromA');
$b = array('foo' => null, 'x' => 'fromB');

echo '$a+$b: ';
var_dump($a+$b);

echo '$b+$a: ';
var_dump($b+$a);

echo 'array_merge($a, $b): ';
var_dump(array_merge($a, $b));

echo 'array_merge($b, $a): ';
var_dump(array_merge($b, $a));

ফলাফল:

$a+$b: array(2) {
  ["foo"]=>
  string(3) "bar"
  ["x"]=>
  string(5) "fromA"
}
$b+$a: array(2) {
  ["foo"]=>
  NULL
  ["x"]=>
  string(5) "fromB"
}
array_merge($a, $b): array(2) {
  ["foo"]=>
  NULL
  ["x"]=>
  string(5) "fromB"
}
array_merge($b, $a): array(2) {
  ["foo"]=>
  string(3) "bar"
  ["x"]=>
  string(5) "fromA"
}

অ্যারেগুলির ক্রমটি মনে রাখবেন।


আপনি অর্ডার পরিবর্তন করেছেন: $a+$bবনাম $b+$a। কিছুই ওভাররাইড করা হয় না।
জেডবাইজেকার

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