如何将一个新项目插入到数组的任何位置,例如在数组的中间?


当前回答

在做了几天之后,这是我能找到的最简单的解决方案。

$indexnumbertoaddat // this is a variable that points to the index # where you 
want the new array to be inserted

$arrayToAdd = array(array('key' => $value, 'key' => $value)); //this is the new 
 array and it's values that you want to add. //the key here is to write it like 
 array(array('key' =>, since you're adding this array inside another array. This 
 is the point that a lot of answer left out. 

array_splice($originalArray, $indexnumbertoaddatt, 0, $arrayToAdd); //the actual 
splice function. You're doing it to $originalArray, at the index # you define, 
0 means you're just shifting all other index items down 1, and then you add the 
new array. 

其他回答

如果你有正则数组,没有什么特别的,这就可以了。记住,使用array_splice()插入元素实际上意味着在开始索引之前插入。移动元素时要小心,因为向上移动意味着$targetIndex -1,向下移动意味着$targetIndex + 1。

class someArrayClass
{
    private const KEEP_EXISTING_ELEMENTS = 0;

    public function insertAfter(array $array, int $startIndex, $newElements)
    {
        return $this->insertBefore($array, $startIndex + 1, $newElements);
    }

    public function insertBefore(array $array, int $startIndex, $newElements)
    {
        return array_splice($array, $startIndex, self::KEEP_EXISTING_ELEMENTS, $newElements);
    }
}

通常,使用标量值:

$elements = array('foo', ...);
array_splice($array, $position, $length, $elements);

要在数组中插入一个数组元素,不要忘记将数组包装在数组中(因为它是一个标量值!):

$element = array('key1'=>'value1');
$elements = array($element);
array_splice($array, $position, $length, $elements);

否则,数组的所有键都将逐条添加。

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;
}

这也是一个有效的解决方案:

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

在数组开头添加元素的提示:

$a = array('first', 'second');
$a[-1] = 'i am the new first element';

然后:

foreach($a as $aelem)
    echo $a . ' ';
//returns first, second, i am...

but:

for ($i = -1; $i < count($a)-1; $i++)
     echo $a . ' ';
//returns i am as 1st element