2012-10-31 29 views
0

這裏面是我的榜樣陣列如何插入帶有值的鍵進入特定場所的陣列

$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" 
    } 
} 

我將如何做到這一點?

感謝您的幫助提前

+1

請儘量澄清你想要達到的目標,這是對我不清楚。 – Nelson

+0

@Nelson嗨我正在運行一個foreach循環,並調用一個函數來在當前的「活動」鍵上添加一個「條目」。我不知道如何解釋它。我寧願這是插入上面,而不是頂部或底部維持排序。 – anastymous

+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初始化,它必須是一個數組包含新的元素,所以它必須是一個數組包含你想要的新元素,一個新數組。

+0

這是否在同一個數組的foreach內工作? –

+0

@Jack內的'for'它應該工作。在'foreach'內我不知道,但我猜這不會,因爲數組的內部指針可能會被'array_splice'修改 –

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

您可以在使用array_splice SIMPL E對於

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

我想是這樣的:

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

有可能是在那裏一個錯誤,但你的想法..