উত্তর:
আপনি এটি কিছুটা স্বজ্ঞাত হতে পারেন। এটিতে কেবল একটি ফাংশন কল প্রয়োজন array_splice
:
$original = array( 'a', 'b', 'c', 'd', 'e' );
$inserted = array( 'x' ); // not necessarily an array, see manual quote
array_splice( $original, 3, 0, $inserted ); // splice in at position 3
// $original is now a b c x d e
প্রতিস্থাপনটি যদি কেবল একটি উপাদান হয় তবে এটির চারপাশে অ্যারে () লাগানো প্রয়োজন হবে না, যদি না উপাদানটি নিজেই অ্যারে, কোনও বস্তু বা NULL হয়।
$inserted
অ্যারেতে কীগুলি সংরক্ষণ করবে না ।
(array)$scalar
সমান array($scalar)
, তবে অ্যারে, একটি অবজেক্ট বা নালটির জন্য এটি উপেক্ষা করা হবে (অ্যারে), একটি অ্যারে (অবজেক্ট) এ রূপান্তরিত হবে, বা খালি অ্যারে (নাল) হয়ে যাবে - দেখুন php.net / ম্যানুয়াল / এন / ...
একটি ফাংশন যা উভয় পূর্ণসংখ্যা এবং স্ট্রিং পজিশনে সন্নিবেশ করতে পারে:
/**
* @param array $array
* @param int|string $position
* @param mixed $insert
*/
function array_insert(&$array, $position, $insert)
{
if (is_int($position)) {
array_splice($array, $position, 0, $insert);
} else {
$pos = array_search($position, array_keys($array));
$array = array_merge(
array_slice($array, 0, $pos),
$insert,
array_slice($array, $pos)
);
}
}
পূর্ণসংখ্যার ব্যবহার:
$arr = ["one", "two", "three"];
array_insert(
$arr,
1,
"one-half"
);
// ->
array (
0 => 'one',
1 => 'one-half',
2 => 'two',
3 => 'three',
)
স্ট্রিং ব্যবহার:
$arr = [
"name" => [
"type" => "string",
"maxlength" => "30",
],
"email" => [
"type" => "email",
"maxlength" => "150",
],
];
array_insert(
$arr,
"email",
[
"phone" => [
"type" => "string",
"format" => "phone",
],
]
);
// ->
array (
'name' =>
array (
'type' => 'string',
'maxlength' => '30',
),
'phone' =>
array (
'type' => 'string',
'format' => 'phone',
),
'email' =>
array (
'type' => 'email',
'maxlength' => '150',
),
)
array_splice()
কী হারায়, যেহেতু array_merge()
না। সুতরাং প্রথম ফাংশনের ফলাফলগুলি খুব আশ্চর্যজনক হতে পারে ... বিশেষত কারণ আপনার যদি একই কী সহ দুটি উপাদান থাকে তবে কেবল শেষের মানটিই রাখা হয় ...
এইভাবে আপনি অ্যারে sertোকাতে পারেন:
function array_insert(&$array, $value, $index)
{
return $array = array_merge(array_splice($array, max(0, $index - 1)), array($value), $array);
}
কোনও স্থানীয় পিএইচপি ফাংশন নেই (যা সম্পর্কে আমি অবগত) যা আপনি অনুরোধ করেছেন ঠিক তেমন করতে পারে।
আমি 2 টি পদ্ধতি লিখেছি যা আমি বিশ্বাস করি যে উদ্দেশ্যে উপযুক্ত:
function insertBefore($input, $index, $element) {
if (!array_key_exists($index, $input)) {
throw new Exception("Index not found");
}
$tmpArray = array();
$originalIndex = 0;
foreach ($input as $key => $value) {
if ($key === $index) {
$tmpArray[] = $element;
break;
}
$tmpArray[$key] = $value;
$originalIndex++;
}
array_splice($input, 0, $originalIndex, $tmpArray);
return $input;
}
function insertAfter($input, $index, $element) {
if (!array_key_exists($index, $input)) {
throw new Exception("Index not found");
}
$tmpArray = array();
$originalIndex = 0;
foreach ($input as $key => $value) {
$tmpArray[$key] = $value;
$originalIndex++;
if ($key === $index) {
$tmpArray[] = $element;
break;
}
}
array_splice($input, 0, $originalIndex, $tmpArray);
return $input;
}
দ্রুত এবং সম্ভবত আরও মেমরি দক্ষ করার সময় এটি কেবল সত্যই উপযুক্ত যেখানে অ্যারের কীগুলি বজায় রাখা প্রয়োজন হয় না।
যদি আপনার কীগুলি বজায় রাখা দরকার হয় তবে নিম্নলিখিতগুলি আরও উপযুক্ত হবে;
function insertBefore($input, $index, $newKey, $element) {
if (!array_key_exists($index, $input)) {
throw new Exception("Index not found");
}
$tmpArray = array();
foreach ($input as $key => $value) {
if ($key === $index) {
$tmpArray[$newKey] = $element;
}
$tmpArray[$key] = $value;
}
return $input;
}
function insertAfter($input, $index, $newKey, $element) {
if (!array_key_exists($index, $input)) {
throw new Exception("Index not found");
}
$tmpArray = array();
foreach ($input as $key => $value) {
$tmpArray[$key] = $value;
if ($key === $index) {
$tmpArray[$newKey] = $element;
}
}
return $tmpArray;
}
insertBefore()
, আপনার $tmpArray
পরিবর্তে ফিরে আসা উচিত $input
।
@ হিলিল দুর্দান্ত উত্তরের উপর ভিত্তি করে, পূর্ণসংখ্যা কীগুলি সংরক্ষণ করার সময় একটি নির্দিষ্ট কী পরে নতুন উপাদান কীভাবে সন্নিবেশ করা যায় তা এখানে সহজ ফাংশন:
private function arrayInsertAfterKey($array, $afterKey, $key, $value){
$pos = array_search($afterKey, array_keys($array));
return array_merge(
array_slice($array, 0, $pos, $preserve_keys = true),
array($key=>$value),
array_slice($array, $pos, $preserve_keys = true)
);
}
আপনি যদি প্রাথমিক অ্যারের কীগুলি রাখতে চান এবং কীগুলির সাথে এমন একটি অ্যারে যুক্ত করতে চান তবে নীচের ফাংশনটি ব্যবহার করুন:
function insertArrayAtPosition( $array, $insert, $position ) {
/*
$array : The initial array i want to modify
$insert : the new array i want to add, eg array('key' => 'value') or array('value')
$position : the position where the new array will be inserted into. Please mind that arrays start at 0
*/
return array_slice($array, 0, $position, TRUE) + $insert + array_slice($array, $position, NULL, TRUE);
}
কল উদাহরণ:
$array = insertArrayAtPosition($array, array('key' => 'Value'), 3);
function insert(&$arr, $value, $index){
$lengh = count($arr);
if($index<0||$index>$lengh)
return;
for($i=$lengh; $i>$index; $i--){
$arr[$i] = $arr[$i-1];
}
$arr[$index] = $value;
}
এসোসিয়েটিভ অ্যারের জন্য এটিই আমার পক্ষে কাজ করেছিল:
/*
* Inserts a new key/value after the key in the array.
*
* @param $key
* The key to insert after.
* @param $array
* An array to insert in to.
* @param $new_key
* The key to insert.
* @param $new_value
* An value to insert.
*
* @return
* The new array if the key exists, FALSE otherwise.
*
* @see array_insert_before()
*/
function array_insert_after($key, array &$array, $new_key, $new_value) {
if (array_key_exists($key, $array)) {
$new = array();
foreach ($array as $k => $value) {
$new[$k] = $value;
if ($k === $key) {
$new[$new_key] = $new_value;
}
}
return $new;
}
return FALSE;
}
ফাংশন উত্স - এই ব্লগ পোস্ট । সুনির্দিষ্ট কী সন্নিবেশ করার জন্য কার্যকরী ফাংশনও রয়েছে।
এটি একটি কার্যনির্বাহী সমাধান:
function array_insert(&$array,$element,$position=null) {
if (count($array) == 0) {
$array[] = $element;
}
elseif (is_numeric($position) && $position < 0) {
if((count($array)+position) < 0) {
$array = array_insert($array,$element,0);
}
else {
$array[count($array)+$position] = $element;
}
}
elseif (is_numeric($position) && isset($array[$position])) {
$part1 = array_slice($array,0,$position,true);
$part2 = array_slice($array,$position,null,true);
$array = array_merge($part1,array($position=>$element),$part2);
foreach($array as $key=>$item) {
if (is_null($item)) {
unset($array[$key]);
}
}
}
elseif (is_null($position)) {
$array[] = $element;
}
elseif (!isset($array[$position])) {
$array[$position] = $element;
}
$array = array_merge($array);
return $array;
}
ক্রেডিটগুলিতে যান: http://binarykitten.com/php/52-php-insert-element-and-shift.html
Jay.lee দ্বারা সমাধান নিখুঁত। আপনি যদি কোনও বহুমাত্রিক অ্যারেতে আইটেম (গুলি) যুক্ত করতে চান তবে প্রথমে একটি একক মাত্রিক অ্যারে যুক্ত করুন এবং তারপরে এটি প্রতিস্থাপন করুন।
$original = (
[0] => Array
(
[title] => Speed
[width] => 14
)
[1] => Array
(
[title] => Date
[width] => 18
)
[2] => Array
(
[title] => Pineapple
[width] => 30
)
)
এই অ্যারেতে একই বিন্যাসে একটি আইটেম যুক্ত করা সমস্ত আইটেম হিসাবে অ্যারে সূচি কেবল আইটেমের পরিবর্তে যুক্ত করবে।
$new = array(
'title' => 'Time',
'width' => 10
);
array_splice($original,1,0,array('random_string')); // can be more items
$original[1] = $new; // replaced with actual item
দ্রষ্টব্য: অ্যারে_স্প্লাইস সহ একটি বহুমাত্রিক অ্যারেতে আইটেমগুলি যুক্ত করা কেবল সমস্ত আইটেমের পরিবর্তে সমস্ত সূচককে আইটেম হিসাবে যুক্ত করবে।
সাধারণত স্কেলারের মান সহ:
$elements = array('foo', ...);
array_splice($array, $position, $length, $elements);
আপনার অ্যারেতে একটি একক অ্যারের উপাদান সন্নিবেশ করানোর জন্য কোনও অ্যারেতে অ্যারেটি আবৃত করতে ভুলবেন না (কারণ এটি একটি স্কেলারের মান ছিল!):
$element = array('key1'=>'value1');
$elements = array($element);
array_splice($array, $position, $length, $elements);
অন্যথায় অ্যারের সমস্ত কী এক টুকরো টুকরো যোগ করা হবে।
অ্যারের শুরুতে একটি উপাদান যুক্ত করার ইঙ্গিত :
$a = array('first', 'second');
$a[-1] = 'i am the new first element';
তারপর:
foreach($a as $aelem)
echo $a . ' ';
//returns first, second, i am...
কিন্তু:
for ($i = -1; $i < count($a)-1; $i++)
echo $a . ' ';
//returns i am as 1st element
যদি অনিশ্চিত হয়, তবে এইগুলি ব্যবহার করুন না :
$arr1 = $arr1 + $arr2;
অথবা
$arr1 += $arr2;
কারণ + মূল অ্যারের সাথে ওভাররাইট করা হবে। ( উত্স দেখুন )
আর একবার চেষ্টা কর:
$colors = array('red', 'blue', 'yellow');
$colors = insertElementToArray($colors, 'green', 2);
function insertElementToArray($arr = array(), $element = null, $index = 0)
{
if ($element == null) {
return $arr;
}
$arrLength = count($arr);
$j = $arrLength - 1;
while ($j >= $index) {
$arr[$j+1] = $arr[$j];
$j--;
}
$arr[$index] = $element;
return $arr;
}
function array_insert($array, $position, $insert) {
if ($position > 0) {
if ($position == 1) {
array_unshift($array, array());
} else {
$position = $position - 1;
array_splice($array, $position, 0, array(
''
));
}
$array[$position] = $insert;
}
return $array;
}
কল উদাহরণ:
$array = array_insert($array, 1, ['123', 'abc']);
স্ট্রিং কীগুলির সাহায্যে অ্যারেতে উপাদান সন্নিবেশ করানোর জন্য আপনি এই জাতীয় কিছু করতে পারেন:
/* insert an element after given array key
* $src = array() array to work with
* $ins = array() to insert in key=>array format
* $pos = key that $ins will be inserted after
*/
function array_insert_string_keys($src,$ins,$pos) {
$counter=1;
foreach($src as $key=>$s){
if($key==$pos){
break;
}
$counter++;
}
$array_head = array_slice($src,0,$counter);
$array_tail = array_slice($src,$counter);
$src = array_merge($array_head, $ins);
$src = array_merge($src, $array_tail);
return($src);
}
$src = array_merge($array_head, $ins, $array_tail);
?