নির্দিষ্ট অবস্থানে অ্যারেতে কীভাবে উপাদান প্রবেশ করানো যায়?


190

আসুন কল্পনা করুন যে আমাদের দুটি অ্যারে রয়েছে:

$array_1 = array(
  '0' => 'zero',
  '1' => 'one',
  '2' => 'two',
  '3' => 'three',
);

$array_2 = array(
  'zero'  => '0',
  'one'   => '1',
  'two'   => '2',
  'three' => '3',
);

এখন, আমি array('sample_key' => 'sample_value')প্রতিটি অ্যারের তৃতীয় উপাদান পরে সন্নিবেশ করতে চাই । আমি এটা কিভাবে করবো?


উত্তর:


207

array_slice() অ্যারের অংশগুলি এবং ইউনিয়ন নিষ্কাশন করতে ব্যবহার করা যেতে পারে অ্যারে অপারেটর ( +) অংশগুলি পুনরায় সমন্বিত করতে পারে।

$res = array_slice($array, 0, 3, true) +
    array("my_key" => "my_value") +
    array_slice($array, 3, count($array)-3, true);

এই উদাহরণ:

$array = array(
  'zero'  => '0',
  'one'   => '1',
  'two'   => '2',
  'three' => '3',
);
$res = array_slice($array, 0, 3, true) +
    array("my_key" => "my_value") +
    array_slice($array, 3, count($array) - 1, true) ;
print_r($res);

দেয়:

বিন্যাস
(
    [শূন্য] => 0
    [এক] => ১
    [দুই] => ২
    [আমার_কি] => আমার_মূল্য
    [তিন] => 3
)

8
এম 42 এর পরামর্শ অনুসারে আপনার অ্যারে_স্প্লাইস () ব্যবহার করা উচিত। এটি কোডের এক লাইনেই সমস্যাটি সমাধান করে।
নিক

27
+ব্যবহার করা উচিত নয়! array_mergeপরিবর্তে ব্যবহার করুন! সূচকগুলি যদি পূর্ণসংখ্যার হয় (স্বাভাবিক অ্যারে, হ্যাশ নয়) তবে +প্রত্যাশার মতো কাজ করবে না !!!
টিএমএস

4
@ টমাস এটি প্রত্যাশার মতো কাজ করে কিনা আপনার প্রত্যাশার উপর নির্ভর করে। array_mergeএই সংখ্যাটির জন্য সংখ্যাসূচক কীগুলির বিষয়ে আচরণ করা যথাযথ নয়।
আর্টেফ্যাক্টো

10
count($array)-3আপনি ব্যবহার না করে কেবল একই প্রভাবের নালাকে নির্দিষ্ট করে দিতে পারেন। এছাড়াও, array_mergeপ্রস্তাবিত টিএমএস হিসাবে ব্যবহারের জন্য আপনাকে কোনও অনন্য সূচক ব্যবহার করার প্রয়োজন হবে না। উদাহরণ: একটি বিদ্যমান অ্যারেতে "নতুন মূল্য" যুক্ত করুন:$b = array_merge( array_slice( $a, 0, 1, true ), array( 'new-value' ), array_slice( $a, 1, null, true ) );
র‌্যাডলি সুস্টায়ার

1
+বনাম সম্পর্কে কিছু বিভ্রান্তি আছে বলে মনে হচ্ছে array_merge। যদি আপনি জিনিসগুলিকে একটি সংখ্যাসূচক অ্যারেতে প্রবেশ করতে চান তবে আপনার ব্যবহার করা উচিত নয় +কারণ এটি সম্ভবত আপনার প্রত্যাশার সাথে মেলে না। তবে array_mergeআপনারও ব্যবহার করা উচিত নয় ; সংখ্যাযুক্ত অ্যারেগুলির জন্য, এই পুরো সমস্যাটি array_spliceফাংশন দিয়ে সমাধান করা হবে। সহযোগী বা মিশ্র অ্যারেগুলির জন্য, আপনি সম্ভবত চান না যে সংখ্যার কীগুলি পুনরায় সূচিযুক্ত করা যাতে ব্যবহার +করা সম্পূর্ণ উপযুক্ত।
meustrus

103

আপনার প্রথম অ্যারের জন্য, ব্যবহার করুন array_splice():

$array_1 = array(
  '0' => 'zero',
  '1' => 'one',
  '2' => 'two',
  '3' => 'three',
);

array_splice($array_1, 3, 0, 'more');
print_r($array_1);

আউটপুট:

Array(
    [0] => zero
    [1] => one
    [2] => two
    [3] => more
    [4] => three
)

দ্বিতীয়টির জন্য কোনও অর্ডার নেই তাই আপনাকে কেবল এটি করতে হবে:

$array_2['more'] = '2.5';
print_r($array_2);

এবং আপনি যা চান তা দিয়ে কীগুলি বাছাই করুন।


33
দ্বিতীয় অ্যারেতে একটি অর্ডার আছে ... সমস্ত অ্যারে রয়েছে, কারণ সেগুলি ডাবল লিঙ্কযুক্ত তালিকাও।
আর্টেফ্যাক্টো

5
-1, যেমন "কোন আদেশ নেই" উল্লিখিত হিসাবে মিথ্যা। এছাড়াও, অ্যারে_স্প্লাইস প্রথম উদাহরণে কী / মান সংঘটিত করে দেয় (তবে সম্ভবত ওপি এর ইচ্ছা করে)।
ব্র্যাড কোচ

2
পিএইচপি-তে @ আর্টেফ্যাক্টো "অ্যারে" আসলে বাস্তবে অর্ডার করা হ্যাশ টেবিল । পিএইচপি অ্যারে অ্যারেগুলির মতো কাজ করে তবে এগুলি কখনই সত্যই অ্যারে হয় না; তারা তালিকাগুলি বা অ্যারে তালিকাগুলিও লিঙ্কযুক্ত নয়।
ফ্রেডেরিক ক্রাউটওয়াল্ড

1
5 ঘন্টা পরে অবশেষে আমি বুঝতে একটি উত্তর পড়লাম, ধন্যবাদ! অতিরিক্ত একটি বিষয় লক্ষণীয় যে কেউ যদি কোনও এসোসিয়েটিভ অ্যারেটিকে চাপ দিচ্ছে তবে তারা অ্যারে_স্প্লাইসে 4 টি যুক্তি হিসাবে "অ্যারে "ও নির্দিষ্ট করতে পারে..এমনই: অ্যারে_স্প্লাইস ($ অ্যারে_1, 3, 0, এআরএআর (ray অ্যারে_নেম_টো_সিন্ট));
রবার্ট সিনক্লেয়ার

1
পছন্দ করেছেন পিএইচপি 7 তার হ্যাশ টেবিল + আদেশিত তালিকা বাস্তবায়নের জন্য দুটি অ্যারে ব্যবহার করে। এখানে মূল পিএইচপি ডেভস (নিকিক) এর একটির একটি নিবন্ধ রয়েছে: nikic.github.io/2014/12/22/…
CubicleSoft

19

কোড:

function insertValueAtPosition($arr, $insertedArray, $position) {
    $i = 0;
    $new_array=[];
    foreach ($arr as $key => $value) {
        if ($i == $position) {
            foreach ($insertedArray as $ikey => $ivalue) {
                $new_array[$ikey] = $ivalue;
            }
        }
        $new_array[$key] = $value;
        $i++;
    }
    return $new_array;
}

উদাহরণ:

$array        = ["A"=8, "K"=>3];
$insert_array = ["D"= 9];

insertValueAtPosition($array, $insert_array, $position=2);
// result ====> ["A"=>8,  "D"=>9,  "K"=>3];

সত্যই নিখুঁত দেখাচ্ছে না, কিন্তু এটি কার্যকর।


11
আপনি মূলত স্প্লিকিংয়ের চেষ্টা করছেন, চাকাটি পুনরায় উদ্ভাবন করবেন না।
পল ড্রাগোনিস

11
নাহ, তিনি চাকাটি পুনরায় উদ্ভাবন করছেন না। অ্যারে_স্প্লাইস () কী এবং মান রাখার অনুমতি দেয় না। কী হিসাবে নির্দিষ্ট অবস্থানের সাথে কেবল মান।
কিরজিলা

হ্যাঁ, তবে যেমনটি আগেই মন্তব্য করেছিলেন, অ্যারে_স্প্লাইস সহযোগী অ্যারেগুলিকে সমর্থন করে না। আমি আরও মার্জিত পদ্ধতি দেখে খুশি হতে চাই।
clausvdb

আপনার ফাংশনটি সত্যিই ভাল তবে এটি অ্যারের দৈর্ঘ্যের চেয়ে বড় পজিশনের সাথে সঠিকভাবে কাজ করে না (এই অ্যারে_আইনটারটি কার্যকর করার চেষ্টা করুন ($ অ্যারে_2, অ্যারে ("ওয়াও" => "বাহ"), ৪))। তবে এটি সহজেই ঠিক করা যায়। আপনার উত্তর দুর্দান্ত এবং আপনি আমার প্রশ্নের উত্তর দিয়েছেন!
কিরজিলা

13

এখানে আপনি ব্যবহার করতে পারেন একটি সাধারণ ফাংশন। জাস্ট প্লাগ এন প্লে।

এটি ইনডেক্স দ্বারা সন্নিবেশ করা হয়, মূল্য দ্বারা নয়।

আপনি অ্যারে পাস করতে বা আপনার ইতিমধ্যে ঘোষিত একটি ব্যবহার করতে পারেন।

সম্পাদনা: সংক্ষিপ্ত সংস্করণ:

   function insert($array, $index, $val)
   {
       $size = count($array); //because I am going to use this more than one time
       if (!is_int($index) || $index < 0 || $index > $size)
       {
           return -1;
       }
       else
       {
           $temp   = array_slice($array, 0, $index);
           $temp[] = $val;
           return array_merge($temp, array_slice($array, $index, $size));
       }
   }

  function insert($array, $index, $val) { //function decleration
    $temp = array(); // this temp array will hold the value 
    $size = count($array); //because I am going to use this more than one time
    // Validation -- validate if index value is proper (you can omit this part)       
        if (!is_int($index) || $index < 0 || $index > $size) {
            echo "Error: Wrong index at Insert. Index: " . $index . " Current Size: " . $size;
            echo "<br/>";
            return false;
        }    
    //here is the actual insertion code
    //slice part of the array from 0 to insertion index
    $temp = array_slice($array, 0, $index);//e.g index=5, then slice will result elements [0-4]
    //add the value at the end of the temp array// at the insertion index e.g 5
    array_push($temp, $val);
    //reconnect the remaining part of the array to the current temp
    $temp = array_merge($temp, array_slice($array, $index, $size)); 
    $array = $temp;//swap// no need for this if you pass the array cuz you can simply return $temp, but, if u r using a class array for example, this is useful. 

     return $array; // you can return $temp instead if you don't use class array
}

এখন আপনি কোড ব্যবহার করে পরীক্ষা করতে পারেন

//1
$result = insert(array(1,2,3,4,5),0, 0);
echo "<pre>";
echo "<br/>";
print_r($result);
echo "</pre>";
//2
$result = insert(array(1,2,3,4,5),2, "a");
echo "<pre>";
print_r($result);
echo "</pre>";
//3
$result = insert(array(1,2,3,4,5) ,4, "b");
echo "<pre>";
print_r($result);
echo "</pre>";
//4
$result = insert(array(1,2,3,4,5),5, 6);
echo "<pre>";
echo "<br/>";
print_r($result);
echo "</pre>";

এবং ফলাফল:

//1
Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
)
//2
Array
(
    [0] => 1
    [1] => 2
    [2] => a
    [3] => 3
    [4] => 4
    [5] => 5
)
//3
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => b
    [5] => 5
)

//4
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
)

12
$list = array(
'Tunisia' => 'Tunis',
'Germany' => 'Berlin',
'Italy' => 'Rom',
'Egypt' => 'Cairo'
);
$afterIndex = 2;
$newVal= array('Palestine' => 'Jerusalem');

$newList = array_merge(array_slice($list,0,$afterIndex+1), $newVal,array_slice($list,$afterIndex+1));

কেবল একটি উল্লেখ: অ্যারে_ড্র্যামের পরিবর্তে, আজকাল কেউ অ্যারেতে + ব্যবহার করতে পারে
রোলেওর

@ রিলেলিওর তবে সাবধান হন: "যদি ইনপুট অ্যারেগুলির একই স্ট্রিং কী থাকে, তবে সেই কীটির পরবর্তী মানটি পূর্ববর্তীটি ওভাররাইট করে। তবে সংযুক্ত করা হবে। " - অ্যারে_ব্রজ
দীর্ঘ

5

এই ফাংশনটি সমর্থন করে:

  • উভয় সংখ্যাসূচক এবং সহযোগী কীগুলি
  • প্রতিষ্ঠিত কীটির আগে বা পরে sertোকান
  • কী প্রতিষ্ঠিত না হলে অ্যারের শেষে যুক্ত করুন

function insert_into_array( $array, $search_key, $insert_key, $insert_value, $insert_after_founded_key = true, $append_if_not_found = false ) {

        $new_array = array();

        foreach( $array as $key => $value ){

            // INSERT BEFORE THE CURRENT KEY? 
            // ONLY IF CURRENT KEY IS THE KEY WE ARE SEARCHING FOR, AND WE WANT TO INSERT BEFORE THAT FOUNDED KEY
            if( $key === $search_key && ! $insert_after_founded_key )
                $new_array[ $insert_key ] = $insert_value;

            // COPY THE CURRENT KEY/VALUE FROM OLD ARRAY TO A NEW ARRAY
            $new_array[ $key ] = $value;

            // INSERT AFTER THE CURRENT KEY? 
            // ONLY IF CURRENT KEY IS THE KEY WE ARE SEARCHING FOR, AND WE WANT TO INSERT AFTER THAT FOUNDED KEY
            if( $key === $search_key && $insert_after_founded_key )
                $new_array[ $insert_key ] = $insert_value;

        }

        // APPEND IF KEY ISNT FOUNDED
        if( $append_if_not_found && count( $array ) == count( $new_array ) )
            $new_array[ $insert_key ] = $insert_value;

        return $new_array;

    }

ব্যবহার:

    $array1 = array(
        0 => 'zero',
        1 => 'one',
        2 => 'two',
        3 => 'three',
        4 => 'four'
    );

    $array2 = array(
        'zero'  => '# 0',
        'one'   => '# 1',
        'two'   => '# 2',
        'three' => '# 3',
        'four'  => '# 4'
    );

    $array3 = array(
        0 => 'zero',
        1 => 'one',
       64 => '64',
        3 => 'three',
        4 => 'four'
    );


    // INSERT AFTER WITH NUMERIC KEYS
    print_r( insert_into_array( $array1, 3, 'three+', 'three+ value') );

    // INSERT AFTER WITH ASSOC KEYS
    print_r( insert_into_array( $array2, 'three', 'three+', 'three+ value') );

    // INSERT BEFORE
    print_r( insert_into_array( $array3, 64, 'before-64', 'before-64 value', false) );

    // APPEND IF SEARCH KEY ISNT FOUNDED
    print_r( insert_into_array( $array3, 'undefined assoc key', 'new key', 'new value', true, true) );

ফলাফল:

Array
(
    [0] => zero
    [1] => one
    [2] => two
    [3] => three
    [three+] => three+ value
    [4] => four
)
Array
(
    [zero] => # 0
    [one] => # 1
    [two] => # 2
    [three] => # 3
    [three+] => three+ value
    [four] => # 4
)
Array
(
    [0] => zero
    [1] => one
    [before-64] => before-64 value
    [64] => 64
    [3] => three
    [4] => four
)
Array
(
    [0] => zero
    [1] => one
    [64] => 64
    [3] => three
    [4] => four
    [new key] => new value
)

4

আমি সম্প্রতি একটি ফাংশন লিখেছিলাম যা দেখে মনে হচ্ছে এরকম কিছু করার মতো যা আপনি চেষ্টা করছেন, এটি ক্ল্যাশডিবিবির উত্তরের অনুরূপ পন্থা।

function magic_insert($index,$value,$input_array ) {
  if (isset($input_array[$index])) {
    $output_array = array($index=>$value);
    foreach($input_array as $k=>$v) {
      if ($k<$index) {
        $output_array[$k] = $v;
      } else {
        if (isset($output_array[$k]) ) {
          $output_array[$k+1] = $v;
        } else {
          $output_array[$k] = $v;
        }
      } 
    }

  } else {
    $output_array = $input_array;
    $output_array[$index] = $value;
  }
  ksort($output_array);
  return $output_array;
}

মূলত এটি একটি নির্দিষ্ট পয়েন্টে সন্নিবেশ করে তবে সমস্ত আইটেম নীচে স্থানান্তরিত করে ওভাররাইট করা এড়ানো হয়।


এই ম্যাজিক_ইন্টারটি (3, অ্যারে ("বাহ" => "বাহ")), $ অ্যারে_2) ব্যবহার করে দেখুন; প্রশ্নের পাঠ্য থেকে $ অ্যারে_2 নিন।
কিরজিলা

আমি প্রত্যাশা করব না যেহেতু $ অ্যারে ৩ কাজ করে কাজ করা সাহসী এবং অবস্থানের ধারণাটি সাধারণত এমন পরিস্থিতিতে প্রাসঙ্গিক নয়।
পিটার ও'ক্যালাহান

4

আপনি যদি না জানেন যে আপনি এটি # 3 অবস্থানে সন্নিবেশ করতে চান তবে আপনি কীটি পরে এটি sertোকাতে চান তা আপনি জানেন তবে এই প্রশ্নটি দেখার পরে আমি এই ছোট্ট ফাংশনটি রান্না করেছি।

/**
     * Inserts any number of scalars or arrays at the point
     * in the haystack immediately after the search key ($needle) was found,
     * or at the end if the needle is not found or not supplied.
     * Modifies $haystack in place.
     * @param array &$haystack the associative array to search. This will be modified by the function
     * @param string $needle the key to search for
     * @param mixed $stuff one or more arrays or scalars to be inserted into $haystack
     * @return int the index at which $needle was found
     */                         
    function array_insert_after(&$haystack, $needle = '', $stuff){
        if (! is_array($haystack) ) return $haystack;

        $new_array = array();
        for ($i = 2; $i < func_num_args(); ++$i){
            $arg = func_get_arg($i);
            if (is_array($arg)) $new_array = array_merge($new_array, $arg);
            else $new_array[] = $arg;
        }

        $i = 0;
        foreach($haystack as $key => $value){
            ++$i;
            if ($key == $needle) break;
        }

        $haystack = array_merge(array_slice($haystack, 0, $i, true), $new_array, array_slice($haystack, $i, null, true));

        return $i;
    }

এটি ক্রিয়াকলাপ দেখার জন্য এখানে একটি কোডপ্যাড ফ্রিডল রয়েছে: http://codepad.org/5WlKFKfz

দ্রষ্টব্য: অ্যারে_স্প্লাইস () অ্যারে_মার্জ (অ্যারে_স্লাইস ()) এর চেয়ে অনেক বেশি দক্ষ হয়ে উঠত তবে তারপরে আপনার arোকানো অ্যারেগুলির কীগুলি হারিয়ে যেতে পারত। দীর্ঘশ্বাস.


3

ক্লিনার পদ্ধতির (ব্যবহারের তরলতা এবং কম কোডের ভিত্তিতে)।

/**
 * Insert data at position given the target key.
 *
 * @param array $array
 * @param mixed $target_key
 * @param mixed $insert_key
 * @param mixed $insert_val
 * @param bool $insert_after
 * @param bool $append_on_fail
 * @param array $out
 * @return array
 */
function array_insert(
    array $array, 
    $target_key, 
    $insert_key, 
    $insert_val = null,
    $insert_after = true,
    $append_on_fail = false,
    $out = [])
{
    foreach ($array as $key => $value) {
        if ($insert_after) $out[$key] = $value;
        if ($key == $target_key) $out[$insert_key] = $insert_val;
        if (!$insert_after) $out[$key] = $value;
    }

    if (!isset($array[$target_key]) && $append_on_fail) {
        $out[$insert_key] = $insert_val;
    }

    return $out;
}

ব্যবহার:

$colors = [
    'blue' => 'Blue',
    'green' => 'Green',
    'orange' => 'Orange',
];

$colors = array_insert($colors, 'blue', 'pink', 'Pink');

die(var_dump($colors));

2

সবচেয়ে সহজ সমাধান, যদি আপনি একটি নির্দিষ্ট কী পরে সন্নিবেশ করতে চান (একটি উপাদান বা অ্যারে):

function array_splice_after_key($array, $key, $array_to_insert)
{
    $key_pos = array_search($key, array_keys($array));
    if($key_pos !== false){
        $key_pos++;
        $second_array = array_splice($array, $key_pos);
        $array = array_merge($array, $array_to_insert, $second_array);
    }
    return $array;
}

সুতরাং, যদি আপনি:

$array = [
    'one' => 1,
    'three' => 3
];
$array_to_insert = ['two' => 2];

এবং কার্যকর:

$result_array = array_splice_after_key($array, 'one', $array_to_insert);

আপনি থাকছেন:

Array ( 
    ['one'] => 1 
    ['two'] => 2 
    ['three'] => 3 
)

2

অ্যারে_স্প্লাইসের পরিবর্তে অ্যারে_স্প্লাইস ব্যবহার করা হলে একটি কম ফাংশন কল দেয়।

$toto =  array(
  'zero'  => '0',
  'one'   => '1',
  'two'   => '2',
  'three' => '3'
);
$ret = array_splice($toto, 3 );
$toto = $toto +  array("my_key" => "my_value") + $ret;
print_r($toto);

2

আমি যে হিসাবে না


    $slightly_damaged = array_merge(
        array_slice($slightly_damaged, 0, 4, true) + ["4" => "0.0"], 
        array_slice($slightly_damaged, 4, count($slightly_damaged) - 4, true)
    );

কোড
প্লিজ

1

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

class ArrayHelper
{
    /*
        Inserts a value at the given position or throws an exception if
        the position is out of range.
        This function will push the current values up in index. ex. if 
        you insert at index 1 then the previous value at index 1 will 
        be pushed to index 2 and so on.
        $pos: The position where the inserted value should be placed. 
        Starts at 0.
    */
    public static function insertValueAtPos(array &$array, $pos, $value) {
        $maxIndex = count($array)-1;

        if ($pos === 0) {
            array_unshift($array, $value);
        } elseif (($pos > 0) && ($pos <= $maxIndex)) {
            $firstHalf = array_slice($array, 0, $pos);
            $secondHalf = array_slice($array, $pos);
            $array = array_merge($firstHalf, array($value), $secondHalf);
        } else {
            throw new IndexOutOfBoundsException();
        }

    }
}

উদাহরণ:

$array = array('a', 'b', 'c', 'd', 'e');
$insertValue = 'insert';
\ArrayHelper::insertValueAtPos($array, 3, $insertValue);

শুরু $ অ্যারে:

Array ( 
    [0] => a 
    [1] => b 
    [2] => c 
    [3] => d 
    [4] => e 
)

ফলাফল:

Array ( 
    [0] => a 
    [1] => b 
    [2] => c 
    [3] => insert 
    [4] => d 
    [5] => e 
)

1

কিছু ভাল অবস্থানে আইটেম সারণিতে কীভাবে সন্নিবেশ করা যায় এটি এটি আরও ভাল পদ্ধতি।

function arrayInsert($array, $item, $position)
{
    $begin = array_slice($array, 0, $position);
    array_push($begin, $item);
    $end = array_slice($array, $position);
    $resultArray = array_merge($begin, $end);
    return $resultArray;
}

1

আমার এমন কিছু দরকার ছিল যা কী পরে প্রথমে একটি সন্নিবেশ করতে পারে, প্রতিস্থাপন করতে পারে; এবং লক্ষ্য কীটি পাওয়া না গেলে অ্যারের শুরু বা শেষে যুক্ত করুন। ডিফল্ট কী পরে সন্নিবেশ করা হয়।

নতুন ফাংশন

/**
 * Insert element into an array at a specific key.
 *
 * @param array $input_array
 *   The original array.
 * @param array $insert
 *   The element that is getting inserted; array(key => value).
 * @param string $target_key
 *   The key name.
 * @param int $location
 *   1 is after, 0 is replace, -1 is before.
 *
 * @return array
 *   The new array with the element merged in.
 */
function insert_into_array_at_key(array $input_array, array $insert, $target_key, $location = 1) {
  $output = array();
  $new_value = reset($insert);
  $new_key = key($insert);
  foreach ($input_array as $key => $value) {
    if ($key === $target_key) {
      // Insert before.
      if ($location == -1) {
        $output[$new_key] = $new_value;
        $output[$key] = $value;
      }
      // Replace.
      if ($location == 0) {
        $output[$new_key] = $new_value;
      }
      // After.
      if ($location == 1) {
        $output[$key] = $value;
        $output[$new_key] = $new_value;
      }
    }
    else {
      // Pick next key if there is an number collision.
      if (is_numeric($key)) {
        while (isset($output[$key])) {
          $key++;
        }
      }
      $output[$key] = $value;
    }
  }
  // Add to array if not found.
  if (!isset($output[$new_key])) {
    // Before everything.
    if ($location == -1) {
      $output = $insert + $output;
    }
    // After everything.
    if ($location == 1) {
      $output[$new_key] = $new_value;
    }

  }
  return $output;
}

ইনপুট কোড

$array_1 = array(
  '0' => 'zero',
  '1' => 'one',
  '2' => 'two',
  '3' => 'three',
);
$array_2 = array(
  'zero'  => '0',
  'one'   => '1',
  'two'   => '2',
  'three' => '3',
);

$array_1 = insert_into_array_at_key($array_1, array('sample_key' => 'sample_value'), 2, 1);
print_r($array_1);
$array_2 = insert_into_array_at_key($array_2, array('sample_key' => 'sample_value'), 'two', 1);
print_r($array_2);

আউটপুট

Array
(
    [0] => zero
    [1] => one
    [2] => two
    [sample_key] => sample_value
    [3] => three
)
Array
(
    [zero] => 0
    [one] => 1
    [two] => 2
    [sample_key] => sample_value
    [three] => 3
)

1

আপনার প্রশ্নের খুব সহজ 2 স্ট্রিং উত্তর:

$array_1 = array(
  '0' => 'zero',
  '1' => 'one',
  '2' => 'two',
  '3' => 'three',
);

প্রথমে আপনি অ্যারে_স্প্লাইস দিয়ে আপনার তৃতীয় উপাদানটিতে কিছু সন্নিবেশ করুন এবং তারপরে এই উপাদানটির জন্য একটি মান নির্ধারণ করুন:

array_splice($array_1, 3, 0 , true);
$array_1[3] = array('sample_key' => 'sample_value');

1

এটি একটি পুরানো প্রশ্ন, তবে আমি 2014 সালে একটি মন্তব্য পোস্ট করেছি এবং প্রায়শই এটিতে ফিরে আসি। আমি ভেবেছিলাম আমি একটি পূর্ণ উত্তর ছেড়ে দেব। এটি সংক্ষিপ্ততম সমাধান নয় তবে এটি বোঝা বেশ সহজ।

একটি সংখ্যাযুক্ত অবস্থানে, কী সংরক্ষণ এবং সংরক্ষণের ক্রম সংরক্ষণকারী অ্যারেতে একটি নতুন মান সন্নিবেশ করান।

$columns = array(
    'id' => 'ID',
    'name' => 'Name',
    'email' => 'Email',
    'count' => 'Number of posts'
);

$columns = array_merge(
    array_slice( $columns, 0, 3, true ),     // The first 3 items from the old array
    array( 'subscribed' => 'Subscribed' ),   // New value to add after the 3rd item
    array_slice( $columns, 3, null, true )   // Other items after the 3rd
);

print_r( $columns );

/*
Array ( 
    [id] => ID 
    [name] => Name 
    [email] => Email 
    [subscribed] => Subscribed 
    [count] => Number of posts 
)
*/

0

আর্টেফ্যাক্টোর উত্তরের মতো কংক্রিট নয়, তবে অ্যারে_স্লাইস () ব্যবহার করার পরামর্শের ভিত্তিতে আমি পরবর্তী ফাংশনটি লিখেছি:

function arrayInsert($target, $byKey, $byOffset, $valuesToInsert, $afterKey) {
    if (isset($byKey)) {
        if (is_numeric($byKey)) $byKey = (int)floor($byKey);
        $offset = 0;

        foreach ($target as $key => $value) {
            if ($key === $byKey) break;
            $offset++;
        }

        if ($afterKey) $offset++;
    } else {
        $offset = $byOffset;
    }

    $targetLength = count($target);
    $targetA = array_slice($target, 0, $offset, true);
    $targetB = array_slice($target, $offset, $targetLength, true);
    return array_merge($targetA, $valuesToInsert, $targetB);
}

বৈশিষ্ট্য:

  • এক বা একাধিক মান সন্নিবেশ করা হচ্ছে
  • কী মান জোড় sোকানো হচ্ছে
  • কী এর আগে / পরে সন্নিবেশ করা বা অফসেটের মাধ্যমে

ব্যবহারের উদাহরণ:

$target = [
    'banana' => 12,
    'potatoe' => 6,
    'watermelon' => 8,
    'apple' => 7,
    2 => 21,
    'pear' => 6
];

// Values must be nested in an array
$insertValues = [
    'orange' => 0,
    'lemon' => 3,
    3
];

// By key
// Third parameter is not applicable
//     Insert after 2 (before 'pear')
var_dump(arrayInsert($target, 2, null, $valuesToInsert, true));
//     Insert before 'watermelon'
var_dump(arrayInsert($target, 'watermelon', null, $valuesToInsert, false)); 

// By offset
// Second and last parameter are not applicable
//     Insert in position 2 (zero based i.e. before 'watermelon')
var_dump(arrayInsert($target, null, 2, $valuesToInsert, null)); 

0

আপনি যদি সুনির্দিষ্ট অবস্থানে (@ ক্লাউসভিডিবি উত্তরের উপর ভিত্তি করে) কোনও অ্যারেতে একটি আইটেম সন্নিবেশ করতে চান তবে:

function array_insert($arr, $insert, $position) {
    $i = 0;
    $ret = array();
    foreach ($arr as $key => $value) {
            if ($i == $position) {
                $ret[] = $insert;
            }
            $ret[] = $value;
            $i++;
    }
    return $ret;
}

0

আমার সংস্করণটি এখানে:

/**
 * 
 * Insert an element after an index in an array
 * @param array $array  
 * @param string|int $key 
 * @param mixed $value
 * @param string|int $offset
 * @return mixed
 */
function array_splice_associative($array, $key, $value, $offset) {
    if (!is_array($array)) {
        return $array;
    }
    if (array_key_exists($key, $array)) {
        unset($array[$key]);
    }
    $return = array();
    $inserted = false;
    foreach ($array as $k => $v) {
        $return[$k] = $v;
        if ($k == $offset && !$inserted) {
            $return[$key] = $value;
            $inserted = true;
        }
    }
    if (!$inserted) {
        $return[$key] = $value;
    }


    return $return;
}

0

সহজ উপায় .. ব্যবহার array_splice()

$array_1 = array(
  '0' => 'zero',
  '1' => 'one',
  '2' => 'two',
  '3' => 'three',
);

$addArray = array('sample_key' => 'sample_value');

array_splice($rs, 3, 0, $addArray);

ফলাফল..

Array
(
    [0] => zero
    [1] => one
    [2] => two
    [3] => sample_value
    [4] => three
)

2
এটি অন্যান্য সমস্ত মন্তব্য এবং
জবাবগুলিতে

0

এটি এর মধ্যে আরও একটি সমাধান PHP 7.1


     /**
     * @param array $input    Input array to add items to
     * @param array $items    Items to insert (as an array)
     * @param int   $position Position to inject items from (starts from 0)
     *
     * @return array
     */
    function arrayInject( array $input, array $items, int $position ): array 
    {
        if (0 >= $position) {
            return array_merge($items, $input);
        }
        if ($position >= count($input)) {
            return array_merge($input, $items);
        }

        return array_merge(
            array_slice($input, 0, $position, true),
            $items,
            array_slice($input, $position, null, true)
        );
    }

-1

আপনি পূর্বাঞ্চ লুপ চলাকালীন উপাদানগুলি সন্নিবেশ করতে পারেন , যেহেতু এই লুপটি মূল অ্যারের অনুলিপিটিতে কাজ করে , তবে আপনাকে inোকানো লাইনের সংখ্যার উপর নজর রাখতে হবে (আমি এই কোডটিতে এই "ফোলা" বলি):

$bloat=0;
foreach ($Lines as $n=>$Line)
    {
    if (MustInsertLineHere($Line))
        {
        array_splice($Lines,$n+$bloat,0,"string to insert");
        ++$bloat;
        }
    }

স্পষ্টতই, আপনি ফোরচ লুপ চলাকালীন নির্বিচারে সন্নিবেশ এবং মুছে ফেলার জন্য এই "ফোলা" ধারণাটি সাধারণ করতে পারেন।

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