পিএইচপি দুটি অ্যারেস্টিভেটিভ অ্যারে এক অ্যারে মিশ্রিত করে


87
$array1 = array("$name1" => "$id1");

$array2 = array("$name2" => "$id2", "$name3" => "$id3");

আমার সবগুলিকে একত্রিত করার জন্য একটি নতুন অ্যারে দরকার, এটি হবে

$array3 = array("$name1" => "$id1", "$name2" => "$id2", "$name3" => "$id3");

এই কাজ করতে সবচেয়ে ভালো উপায় কি?

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


4
মনে হচ্ছে আপনি সম্ভবত অ্যারে_ড্র্যামের সন্ধান করছেন।
কর্বিন

আমি মনে করি সবচেয়ে ভাল উপায়, যদি আপনি কীগুলি সমস্ত আলাদা জানেন তবে + = অপারেটরটি ব্যবহার করা হয়: $ অ্যারে 1 + = $ অ্যারে 2; এটি $ অ্যারে 2 এর সমস্ত উপাদানকে $ অ্যারে 1 এর শেষে যুক্ত করে।
ডেভিড স্পেক্টর

উত্তর:


130

array_merge() আরও দক্ষ তবে কয়েকটি বিকল্প রয়েছে:

$array1 = array("id1" => "value1");

$array2 = array("id2" => "value2", "id3" => "value3", "id4" => "value4");

$array3 = array_merge($array1, $array2/*, $arrayN, $arrayN*/);
$array4 = $array1 + $array2;

echo '<pre>';
var_dump($array3);
var_dump($array4);
echo '</pre>';


// Results:
    array(4) {
      ["id1"]=>
      string(6) "value1"
      ["id2"]=>
      string(6) "value2"
      ["id3"]=>
      string(6) "value3"
      ["id4"]=>
      string(6) "value4"
    }
    array(4) {
      ["id1"]=>
      string(6) "value1"
      ["id2"]=>
      string(6) "value2"
      ["id3"]=>
      string(6) "value3"
      ["id4"]=>
      string(6) "value4"
    }

7
অপারেটরটি ব্যবহার করে অ্যারে_মেয়ারের সুবিধা কী?
jsteinmann

38
অ্যারে ইউনিয়ন (+): + অপারেটর ডান হাতের অ্যারে থেকে বাম হাতের বাকী কীগুলির উপাদানগুলি যুক্ত করে, যেখানে নকল কীগুলি ওভাররাইট করা হয় না। অ্যারে_মিটার (): যদি ইনপুট অ্যারেগুলির একই স্ট্রিং কী থাকে, তবে সেই কীটির পরবর্তী মানটি পূর্বেরটি ওভাররাইট করে। তবে, অ্যারেতে যদি সংখ্যা কীগুলি থাকে তবে পরবর্তী মানটি মূল মানটিকে ওভাররাইট করে না, তবে সংযুক্ত করা হবে। যদি অ্যারেগুলির মধ্যে কেবল সংখ্যার কী থাকে তবে ফলস্বর অ্যারে শূন্য থেকে শুরু করে ইনক্রিমেন্টিং কীগুলি দেওয়া হয়।
স্যামুয়েল কুক

13
এটিও লক্ষ করা উচিত যে array_mergeকোনও আর্গুমেন্ট যদি নুল হয় তবে NULL ফিরিয়ে দেবে।
SeanWM

4
যদি সেখানে পূর্ণসংখ্যা কীগুলি থাকে তবে সেগুলি 0 থেকে শুরু করে পূর্ণসংখ্য কীগুলিতে পরিবর্তন করা হবে অ্যারে_ড্র্যামের সাথে খুব সতর্ক থাকুন। আপনি যা করতে চেষ্টা করছেন তা করতে আরও ভাল একটি ফোরচ লুপ ব্যবহার করুন।
ব্যবহারকারীর 2850305

24

চেক আউট array_merge()

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

22
@ সুধাংশু শেক্সেনা বিবেচনা করে আমি এই পোস্টটি প্রথম ব্যক্তি, আমি কীভাবে এটির পুনরাবৃত্তি উত্তর হতে পারে তা দেখছি না।
ব্র্যাড

10

এছাড়াও রয়েছে array_replace, যেখানে ডুপ্লিকেট কীগুলি তৈরি না করেই মূল অ্যারে কী => মান সংযোগ সংরক্ষণ করে অন্যান্য অ্যারে দ্বারা সংশোধন করা হয় ।

  • অন্যান্য অ্যারেতে একই কীগুলির কারণে মূল অ্যারে ওভাররাইট করতে মানগুলি হয়
  • অন্যান্য অ্যারেতে নতুন কীগুলি মূল অ্যারেতে তৈরি করা হবে

4
এটা সঠিক উত্তর. আপনার কাছে সংখ্যাসূচক কী থাকলে অ্যারে_মার্জ কাজ করবে না (সমস্ত কীগুলি ধারাবাহিক সূচীতে রূপান্তরিত হবে)।
দিমিত্রি

3

নাল অ্যারে সম্পর্কে সানডাব্লুএম-এর মন্তব্যে ডিল করতে আমি অ্যারে_মিয়ারের চারপাশে একটি মোড়ক ব্যবহার করি; আমি মাঝে মাঝে নকলগুলি থেকে মুক্তি পেতে চাই। একটি নতুন অ্যারে তৈরি করার বিপরীতে আমি সাধারণত একটি অ্যারেটিকে অন্যটিতে মিশে যেতে চাই। এটি এখানে শেষ হয়:

/**
 * Merge two arrays - but if one is blank or not an array, return the other.
 * @param $a array First array, into which the second array will be merged
 * @param $b array Second array, with the data to be merged
 * @param $unique boolean If true, remove duplicate values before returning
 */
function arrayMerge(&$a, $b, $unique = false) {
    if (empty($b)) {
        return;  // No changes to be made to $a
    }
    if (empty($a)) {
        $a = $b;
        return;
    }
    $a = array_merge($a, $b);
    if ($unique) {
        $a = array_unique($a);
    }
}

2
        $array = array(
            22 => true,
            25 => true,
            34 => true,
            35 => true,
        );

        print_r(
            array_replace($array, [
                22 => true,
                42 => true,
            ])
        );

        print_r(
            array_merge($array, [
                22 => true,
                42 => true,
            ])
        );

যদি এটি সংখ্যাযুক্ত তবে অনুক্রমিক অ্যা্যাসোসিয়েটিভ অ্যারে না হয় তবে আপনাকে ব্যবহার করা দরকার array_replace


0

আমি দুটি প্রশ্নের অ্যারেতে যোগ দেওয়ার একটি পরিষ্কার উপায় চিহ্নিত করার চেষ্টা করে এই প্রশ্নে হোঁচট খেয়েছি।

আমি দুটি ভিন্ন টেবিলের সাথে যোগ দেওয়ার চেষ্টা করছিলাম যার একে অপরের সাথে সম্পর্ক ছিল না।

এটিই আমি পিডিও ক্যোয়ারির জন্য দুটি টেবিলের সাথে যোগ দিয়ে এসেছি। স্যামুয়েল কুক তার পক্ষে আমার কাছে array_merge()+1 সহ একটি সমাধান চিহ্নিত করেছিলেন।

        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "SELECT * FROM ".databaseTbl_Residential_Prospects."";
        $ResidentialData = $pdo->prepare($sql);
        $ResidentialData->execute(array($lapi));
        $ResidentialProspects = $ResidentialData->fetchAll(PDO::FETCH_ASSOC);

        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "SELECT * FROM ".databaseTbl_Commercial_Prospects."";
        $CommercialData = $pdo->prepare($sql);
        $CommercialData->execute(array($lapi));
        $CommercialProspects = $CommercialData->fetchAll(PDO::FETCH_ASSOC);

        $Prospects = array_merge($ResidentialProspects,$CommercialProspects);
        echo '<pre>';
        var_dump($Prospects);
        echo '</pre>';

হতে পারে এটি অন্য কাউকে সাহায্য করবে।


0

আপডেট করুন কেবলমাত্র একটি দ্রষ্টব্য নোট, যেহেতু আমি দেখতে পাচ্ছি এটি দেখতে সত্যিই বোকা, এবং খাঁটি পিএইচপি দিয়ে এটির কোনও ভাল ব্যবহার নেই কারণ সেখানে array_mergeঠিক কাজ করে। তবে আপনি ডাউনটাতে নামার আগে পিএইচপি মঙ্গোডিবি ড্রাইভার দিয়ে চেষ্টা করে দেখুন। এই ছেলেটি যে কোনও কারণের জন্য সূচী যুক্ত করবে এবং একত্রিত বস্তুটিকে ধ্বংস করবে। আমার নির্বোধ সামান্য ক্রিয়াকলাপের সাথে, মার্জটি ঠিক যেমনভাবে একটি traditionalতিহ্যবাহী হিসাবে অনুমিত হওয়া উচিত তা প্রকাশ পায় array_merge


আমি জানি এটা একটি পুরানো প্রশ্ন কিন্তু আমি আরও একটি ক্ষেত্রে আমি সম্প্রতি MongoDB চালক জিজ্ঞাস্য এবং কেউই সঙ্গে ছিল যোগ করতে চান array_merge, array_replaceকিংবা array_pushকাজ করেন। আমার অ্যারেতে অ্যারে হিসাবে আবৃত জিনিসগুলির একটি জটিল জটিল কাঠামো ছিল:

$a = [
 ["a" => [1, "a2"]],
 ["b" => ["b1", 2]]
];
$t = [
 ["c" => ["c1", "c2"]],
 ["b" => ["b1", 2]]
];

এবং আমাকে একই কাঠামোটি এভাবে রেখে তাদের মার্জ করা দরকার:

$merged = [
 ["a" => [1, "a2"]],
 ["b" => ["b1", 2]],
 ["c" => ["c1", "c2"]],
 ["b" => ["b1", 2]]
];

আমি যে সর্বোত্তম সমাধানটি নিয়ে এসেছি তা হ'ল:

public static function glueArrays($arr1, $arr2) {
    // merges TWO (2) arrays without adding indexing. 
    $myArr = $arr1;
    foreach ($arr2 as $arrayItem) {
        $myArr[] = $arrayItem;
    }
    return $myArr;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.