2015-11-10 143 views
2

添加多維數組我有一個建立這樣一個多維數組(不介意的字符串長度,我修改了值)在多維數組的特定位置

array(27) { 
    [0]=> 
    array(2) { 
    ["name"]=> 
    string(16) "Arsenal FC" 
    ["id"]=> 
    string(2) "1" 
    } 
    [1]=> 
    array(2) { 
    ["name"]=> 
    string(8) "Liverpool FC" 
    ["id"]=> 
    string(3) "2" 
    } 
[2]=> 
    array(2) { 
    ["name"]=> 
    string(18) "Manchester United" 
    ["id"]=> 
    string(3) "3" 
    } 
} 

現在我想添加一個數組,就是這樣構建的

array(2) { 
    ["name"]=> 
    string(18) "Chelsea FC" 
    ["id"]=> 
    string(3) "4" 

之間的第二個和第三個數組元素。

我已經做了這樣的

$this->clubs = array_slice($this->clubs, 0, 2, true) + 
['name' => 'Chelsea FC', 'id' => 4] + 
array_slice($this->clubs, 2, sizeof($this->clubs), true); 

然而,這將返回以下陣列

array(27) { 
    [0]=> 
    array(2) { 
    ["name"]=> 
    string(16) "Arsenal FC" 
    ["id"]=> 
    string(2) "1" 
    } 
    [1]=> 
    array(2) { 
    ["name"]=> 
    string(8) "Liverpool FC" 
    ["id"]=> 
    string(3) "2" 
    } 
    ["name"]=> 
    string(20) "Chelsea FC" 
    ["id"]=> 
    int(4) 
    [2]=> 
    array(2) { 
    ["name"]=> 
    string(18) "Manchester United" 
    ["id"]=> 
    string(3) "3" 
    } 

正如你所看到的,陣列添加到正確的位置,而不是在正確的格式(而不是多維)。我現在需要做的是在該位置添加數組並增加所有其他索引的數量。

我想實現像這樣

if ($otherClubs->count() > 0) { 

    array_walk($this->clubs, function($item, $key) use($index, $otherClubs) { 
     if ($key > $index) { 
      $this->clubs[$key + $otherClubs->count()] = $item; 
      unset($this->otherClubs[$key]); 
     } 
    }); 
} 

但這完全

array(36) { 
    [0]=> 
    array(2) { 
    ["name"]=> 
    string(16) "Arsenal FC" 
    ["id"]=> 
    string(2) "1" 
    } 
    [1]=> 
    array(2) { 
    ["name"]=> 
    string(8) "Liverpool FC" 
    ["id"]=> 
    string(3) "2" 
    } 
    ["name"]=> 
    string(20) "Chelsea FC" 
    ["id"]=> 
    int(3) 
    [2]=> 
    array(1) { 
    ["id"]=> 
    string(3) "4" 
    } 

破壞了陣列我怎樣才能做到這一點?

回答

2

UPDATE:嘗試array_splice:選項1是更好的,少凌亂,它會保存鍵。

1):

$arr=array (
    '0'=> 
    array(
     "name"=>"Arsenal FC", 
     "id"=>"1" 
    ), 
    '1'=> 
    array(
     "name"=>"Liverpool FC", 
     "id"=>"2" 
    ), 
    '2'=> 
    array(
     "name"=>"Manchester United", 
     "id"=>"3" 
)); 

array_splice($arr, 2, 0, array(array('name' => 'Chelsea FC', 'id' => 4))); 
echo "<pre>"; 
var_dump($arr); 

OUTPUT:

array(4) { [0]=> array(2) { ["name"]=> string(10) "Arsenal FC" ["id"]=> string(1) "1" } [1]=> array(2) { ["name"]=> string(12) "Liverpool FC" ["id"]=> string(1) "2" } [2]=> array(2) { ["name"]=> string(10) "Chelsea FC" ["id"]=> int(4) } [3]=> array(2) { ["name"]=> string(17) "Manchester United" ["id"]=> string(1) "3" } }

你嘗試的風格。

2):

<?php 
$arr=array (
    '0'=> 
    array(
     "name"=>"Arsenal FC", 
     "id"=>"1" 
    ), 
    '1'=> 
    array(
     "name"=>"Liverpool FC", 
     "id"=>"2" 
    ), 
    '2'=> 
    array(
     "name"=>"Manchester United", 
     "id"=>"3" 
)); 


$arr = array_values(array_slice($arr, 0, 2, true) + array(sizeof($arr)=>array('name' => 'Chelsea FC', 'id' => 4)) + array_slice($arr, 2, sizeof($arr), true)); 
echo "<pre>"; 
var_dump($arr); 
?> 
+0

你的第一次嘗試比我使用的要好得多。它的工作沒有問題!謝謝! – Musterknabe

+0

@Musterknabe您的歡迎。 –

1

+嘗試合併數組。因此,您嘗試添加的陣列也應該是多維的

$this->clubs = array_slice($this->clubs, 0, 2, true) + 
[1 => ['name' => 'Chelsea FC', 'id' => 4]] + 
array_slice($this->clubs, 2, sizeof($this->clubs), true); 

缺點是您應該爲要添加的數組提供密鑰。

或者你可以使用array_merge

$this->clubs = array_merge(
    array_slice($this->clubs, 0, 2, true), 
    [['name' => 'Chelsea FC', 'id' => 4]], 
    array_slice($this->clubs, 2, sizeof($this->clubs), true) 
); 
+0

感謝您的評論,但是當我這樣做您的評論,新的數組是無處新的陣列中被發現,當我放棄它的意思,它根本就不存在 – Musterknabe

+0

新陣列必須有一個密鑰才能成功合併 –

+0

是的,這就是爲什麼我寫道,我需要增加所有其他數組值,所以新數組元素不會覆蓋舊數組元素。用'array_walk'查看我的嘗試。但是我在那裏會遇到的問題是,我會增加第四個元素以使索引爲'5'並覆蓋第五個數組元素。我需要以某種方式增加所有值而不會覆蓋其他值 – Musterknabe