2015-11-10 106 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