如何将带有值的键插入到数组内的特定位置

时间:2012-10-31 11:23:47

标签: php arrays multidimensional-array

这是我的示例数组

$inputs = array();

array(4) {
  [0]=>
  array(2) {
    ["id"]=>
    string(1) "1"
    ["name"]=>
    string(4) "13.1"
  }
  [1]=>
  array(2) {
    ["id"]=>
    string(1) "2"
    ["name"]=>
    string(4) "13.2"
  }
  [2]=>
  array(2) {
    ["id"]=>
    string(1) "3"
    ["name"]=>
    string(4) "14.1"
  }
  [3]=>
  array(2) {
    ["id"]=>
    string(1) "4"
    ["name"]=>
    string(4) "14.2"
  }
}

在我的foreach循环期间,我当前正在使用$inputs[2],并且条件逻辑将确定在此之上需要添加新数组。请看下一个例子..

array(4) {
  [0]=>
  array(2) {
    ["id"]=>
    string(1) "1"
    ["name"]=>
    string(4) "13.1"
  }
  [1]=>
  array(2) {
    ["id"]=>
    string(1) "2"
    ["name"]=>
    string(4) "13.2"
  }

  [2]=>
  array(2) {
    ["id"]=>
    string(1) "NEW"
    ["name"]=>
    string(4) "NEW"
  }

  [3]=>
  array(2) {
    ["id"]=>
    string(1) "3"
    ["name"]=>
    string(4) "14.1"
  }
  [4]=>
  array(2) {
    ["id"]=>
    string(1) "4"
    ["name"]=>
    string(4) "14.2"
  }
}

我该怎么做?

感谢您提前的帮助

5 个答案:

答案 0 :(得分:4)

您可以使用array_splice执行此操作:

$inputs = ... your original array;
$newElement = array(array('id' => 'NEW', 'name' => 'NEW'));
array_splice($inputs, 2, 0, $newElement);

var_dump($inputs); // your desired array :)

编辑:修复$newElement初始化,它必须是一个包含新元素的数组,因此它必须是一个包含所需新元素的数组,一个新数组。

答案 1 :(得分:1)

您可以在simple for for

中使用array_splice
for ($i = 0; $i < count($array); ++$i) {
    if (/* condition is true */) {
        array_splice($array, $i, 0, /* your new array */);
        ++$i;
    }
}

答案 2 :(得分:0)

您需要构建新的array

$array = array(
        0 => array("id" => "1","name" => "13.1"),
        1 => array("id" => "2","name" => "13.2"),
        2 => array("id" => "3","name" => "14.1"),
        3 => array("id" => "4","name" => "14.2"));


$append = array("id" => "new","name" => "new");
$copy = array();
$id = 2 ; // add after this ID

foreach($array as $value)
{
    $copy[] = $value ;
    $id == $value['id'] AND $copy[] = $append ;

}

var_dump($copy);

输出

array
  0 => 
    array
      'id' => string '1' (length=1)
      'name' => string '13.1' (length=4)
  1 => 
    array
      'id' => string '2' (length=1)
      'name' => string '13.2' (length=4)
  2 => 
    array
      'id' => string 'new' (length=3)
      'name' => string 'new' (length=3)
  3 => 
    array
      'id' => string '3' (length=1)
      'name' => string '14.1' (length=4)
  4 => 
    array
      'id' => string '4' (length=1)
      'name' => string '14.2' (length=4)

答案 3 :(得分:0)

您可以使用功能:

function insertIn($array, $position, $element)
{
    $output = array();
    for($i=0;$i<$position;$i++)
    {
         $output[$i] = $array[$i];
    }
    $output[$position] = $element;
    for($i=$position+1;$i<count($array)+1;$i++)
    {
         $output[$i] = $array[$i-1];
    }
    return $output;
}

答案 4 :(得分:0)

我想是这样的:

$new_array= array_merge( array_slice($array, 0, $pos), array(($pos+1)=>$value), array_slice($array, $pos, count($array)-$pos) );

那里可能有一个错误,但你明白了......