পিএইচপি তে অ্যারে জন্য অপারেটর?


192
$test = array('hi');
$test += array('test','oh');
var_dump($test);

+পিএইচপি-তে অ্যারের অর্থ কী ?


5
আমি লক্ষ্য করি আপনার প্রশ্নটি ছিল +=এবং গ্রহণযোগ্য উত্তরটি ছিল +। আমার পরীক্ষা থেকে তারা একই আচরণ করে বলে মনে হচ্ছে।
ব্যবহারকারী 151841

7
ডকুমেন্টেশন চমত্কার আপ এটি অঙ্ক
artfulrobot


@ রবিবিভারিল - এই প্রশ্নটিই সেই প্রশ্নটি উল্লেখ করা হয়। তাই আপনি যদি কিছু রেফারেন্স প্রশ্ন সদৃশ
icc97

2
অন্য কেউ সামান্য আতংকিত অ্যারের সংযুক্তকরণের যেমন একটি মৌলিক জিনিস মাধ্যমে পুনর্গঠন করা রয়েছে array_merge? এটির মতো যদি অ্যারেগুলি ডিফল্টরূপে সংঘবদ্ধ অ্যারে হয় এবং সংখ্যাসূচক অ্যারেগুলি দ্বিতীয় শ্রেণির নাগরিক হয়।
icc97

উত্তর:


271

ভাষা অপারেটরদের উপর পিএইচপি ম্যানুয়াল থেকে উদ্ধৃতি দেওয়া

+ অপারেটর বাম-হাতের অ্যারেতে যুক্ত ডান হাতের অ্যারেটি দেয়; উভয় অ্যারেতে থাকা কীগুলির জন্য, বাম-হাতের অ্যারের থেকে উপাদানগুলি ব্যবহার করা হবে এবং ডান হাতের অ্যারে থেকে মিলিত উপাদানগুলি উপেক্ষা করা হবে।

আপনি যদি তাই

$array1 = ['one',   'two',          'foo' => 'bar'];
$array2 = ['three', 'four', 'five', 'foo' => 'baz']; 

print_r($array1 + $array2);

তুমি পাবে

Array
(
    [0] => one   // preserved from $array1 (left-hand array)
    [1] => two   // preserved from $array1 (left-hand array)
    [foo] => bar // preserved from $array1 (left-hand array)
    [2] => five  // added from $array2 (right-hand array)
)

সুতরাং এর যুক্তি +নিম্নলিখিত স্নিপেটের সমতুল্য:

$union = $array1;

foreach ($array2 as $key => $value) {
    if (false === array_key_exists($key, $union)) {
        $union[$key] = $value;
    }
}

আপনি যদি সি-লেভেল বাস্তবায়নের বিবরণে আগ্রহী হন


দ্রষ্টব্য, এটি অ্যারেগুলিকে +কীভাবে array_merge()একত্রিত করবে তার থেকে পৃথক :

print_r(array_merge($array1, $array2));

আপনাকে দিতে হবে

Array
(
    [0] => one   // preserved from $array1
    [1] => two   // preserved from $array1
    [foo] => baz // overwritten from $array2
    [2] => three // appended from $array2
    [3] => four  // appended from $array2
    [4] => five  // appended from $array2
)

আরও উদাহরণের জন্য লিঙ্কযুক্ত পৃষ্ঠাগুলি দেখুন।


1
পিএইচপি.এন. দ্বারা উত্পাদিত @ পেসারিয়ার পিএইচপি-তে কোনও আনুষ্ঠানিক ধারণা নেই, তবে হুডের নীচে +এবং array_mergeকল উভয়ই zend_hash_merge। এটিও প্রত্যাশিত, যেহেতু পিএইচপি-তে অ্যারেগুলি অর্ডার করা হ্যাশ মানচিত্র হিসাবে প্রয়োগ করা হয়।
বিশপ

1
@ পেসারিয়ার পিএইচপিএন অনলাইন ডক্স হ'ল একটি নির্দিষ্টকরণের নিকটতম রেকর্ড, তবে আইএমও those ডকসটি সত্য সত্যের চেয়ে কম পড়ে: একটি, কোডটি লেখার পরে সেগুলি আপডেট করা হয়েছে; দুই, এগুলি প্রতিটি বিশেষ ব্যবহারের জন্য লেখা হয় না।
বিশপ

14
পিএইচপি এর আচরণ +এবং array_mergeবিকৃত এবং অনিচ্ছুক। সরল-ইংলিশ পাঠটি স্বজ্ঞাতভাবে আপনাকে 'যোগ' বা 'মার্জিং' অ্যারেগুলি যা বলবে তার থেকে এগুলি বিপরীত're অন্যান্য ভাষা / গ্রন্থাগারগুলি +তালিকাগুলি (উদাহরণস্বরূপ পাইথনে) এবং "একত্রিত" ফাংশনগুলিকে এক বস্তুর থেকে অন্য বস্তুর (যেমন ল্যাডাশে) যোগ করার জন্য ব্যবহার করে। তবুও পিএইচপি এ এটি অন্যভাবে; array_mergeতালিকার মতো অ্যারেগুলিকে সংযুক্ত করার জন্য ব্যবহার করা যেতে পারে তবে তা +পারে না। বিপরীতে array_merge, +সর্বদা অপারেশন সম্পাদন করে যা অন্য কোনও ভাষায় "মার্জ" বলে।
মার্ক আমেরিকা

1
@ icc97- এ তারা সত্যিই কেবল হ্যাশম্যাপস। দেখুন nikic.github.io/2014/12/22/…
গর্ডন

2
আমি একটি উপনাম তৈরি করতে পারে কিনা তা দেখার জন্য একটি বাগ জমা দেওয়ার চেষ্টা করেছি । array_concatarray_merge
icc97

18

এটি ব্যবহারের জন্য আমি যে সর্বোত্তম উদাহরণটি পেয়েছি তা হ'ল একটি কনফিগার অ্যারে।

$user_vars = array("username"=>"John Doe");
$default_vars = array("username"=>"Unknown", "email"=>"no-reply@domain.com");

$config = $user_vars + $default_vars;

$default_vars, যেমন প্রস্তাব দেওয়া হয়, ডিফল্ট মান জন্য অ্যারে। $user_varsঅ্যারে মান সংজ্ঞায়িত ওভাররাইট করবে $default_vars। যে কোনও অনুপস্থিত মান $user_varsএখন ডিফল্ট ভার্স $default_vars

এটি হবে print_r:

Array(2){
    "username" => "John Doe",
    "email" => "no-reply@domain.com"
}

আশা করি এটা কাজে লাগবে!


6

এই অপারেটরটি দুটি অ্যারের সংশ্লেষ নিয়ে যায় (অ্যারে_মেজরের অনুরূপ, অ্যারে_ডর্মাইয়ারের সদৃশ কীগুলি ওভাররাইট করা বাদে)।

অ্যারে অপারেটরগুলির জন্য ডকুমেন্টেশন এখানে পাওয়া যায় ।


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

সুতরাং, একটি ভাল অনুশীলন হিসাবে, আমি মনে করি, আমাদের ইনপুট অ্যারেগুলি খালি অ্যারে হিসাবে শুরু করা উচিত। তোমরা কি বলো?
সন্দীপন নাথ

5

সংখ্যাসূচক কীগুলির সাথে যত্নশীল, যদি সেগুলি সংরক্ষণ করা উচিত বা আপনি যদি কিছু ছেড়ে দিতে চান না

$a = array(2 => "a2", 4 => "a4", 5 => "a5");
$b = array(1 => "b1", 3 => "b3", 4 => "b4");

মিলন

print_r($a+$b);
Array
(
    [2] => a2
    [4] => a4
    [5] => a5
    [1] => b1
    [3] => b3
)

একত্রিত করা

print_r(array_merge($a, $b));
Array
(
    [0] => a2
    [1] => a4
    [2] => a5
    [3] => b1
    [4] => b3
    [5] => b4
)

3

+অপারেটর হিসাবে একই ফল array_replace () । তবে যেহেতু অপারেটরের যুক্তিগুলি বিপরীত রয়েছে, ফলস্বরূপ অ্যারের ক্রমও ভিন্ন হতে পারে।

এই পৃষ্ঠা থেকে অন্য একটি উদাহরণ প্রসারিত:

$array1 = array('one', 'two', 'foo' => 'bar');
$array2 = array('three', 'four', 'five', 'foo' => 'baz'); 

print_r($array1 + $array2);
print_r(array_replace($array2, $array1)); //note reversed argument order

আউটপুট:

Array
(
    [0] => one   // preserved from $array1
    [1] => two   // preserved from $array1
    [foo] => bar // preserved from $array1
    [2] => five  // added from $array2
)
Array
(
    [0] => one   // preserved from $array1
    [1] => two   // preserved from $array1
    [2] => five  // added from $array2
    [foo] => bar // preserved from $array1
)

+চশমা দ্বারা গ্যারান্টিযুক্ত ক্রম কি ? কি হবে array_replace?
পেসারিয়ার

1
  1. অ্যারে প্লাস অপারেশন সমস্ত অ্যারেকে অ্য্যাসোস অ্যারে হিসাবে বিবেচনা করে।
  2. প্লাস চলাকালীন কী বিরোধ থাকলে, বাম (পূর্ববর্তী) মান রাখা হবে

বিষয়গুলি পরিষ্কার করার জন্য আমি নীচের কোডটি পোস্ট করি।

$a + $b = array_plus($a, $b)

function array_plus($a, $b){
    $results = array();
    foreach($a as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
    foreach($b as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
    return $results;
}

@ টমলিনের কোড রান আপনার প্রমাণ "অ্যারে প্লাস অপারেশন সমস্ত অ্যারেকে এসোসিয়ে অ্যারে হিসাবে বিবেচনা করে " প্রমাণ করে বলে মনে হচ্ছে is
পেসারিয়ার

@ পেসারিয়ার সেই কীটিও পূর্ণসংখ্যার হতে পারে।
হিটেশ

-2

এটি আগেরটিতে নতুন অ্যারে সংযুক্ত করবে।


-4
$var1 = "example";
$var2 = "test";
$output = array_merge((array)$var1,(array)$var2);
print_r($output);

অ্যারে ([0] => উদাহরণ [1] => পরীক্ষা)


1
এই থ্রেডটিতে কয়েকবার উল্লেখ করা হয়েছে যে অ্যারে_মার্জ () কীভাবে একত্রিত হয় না।
ডাবলজোশ

@ ডাবলজোশ, "একত্রিত"? অর্থ?
পেসারিয়ার

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