जवाबों:
आपको यह थोड़ा अधिक सहज लग सकता है। इसके लिए केवल एक फ़ंक्शन कॉल की आवश्यकता है 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()
ऐसा नहीं करता। तो पहले फ़ंक्शन के परिणाम बहुत ही आश्चर्यजनक हो सकते हैं ... खासकर क्योंकि अगर आपके पास एक ही कुंजी के साथ दो तत्व हैं, तो केवल पिछले एक का मूल्य रखा गया है ...
इस तरह से आप एरेज़ डाल सकते हैं:
function array_insert(&$array, $value, $index)
{
return $array = array_merge(array_splice($array, max(0, $index - 1)), array($value), $array);
}
कोई मूल PHP फ़ंक्शन नहीं है (जो मुझे पता है) कि आप क्या अनुरोध कर सकते हैं।
मैंने 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
।
@Hilil के शानदार जवाब के आधार पर, यहाँ बताया गया है कि कैसे एक विशिष्ट कुंजी के बाद नए तत्व को सम्मिलित किया जाए, जबकि पूर्णांक कुंजियों को संरक्षित किया जाए:
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
नोट: array_splice के साथ वस्तुओं को सीधे एक बहुआयामी सरणी में जोड़ने से इसके सभी इंडेक्स केवल आइटम के बजाय आइटम के रूप में जुड़ जाएंगे।
सामान्य रूप से, स्केलर मूल्यों के साथ:
$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);
?