在某个位置展平另一个数组中的php数组

在某个位置展平另一个数组中的php数组,php,arrays,Php,Arrays,我有一个返回如下数组的函数 Array ( [0] => Array ( [name] => Percent [attributes] => Array ( [Percent] => 50 ) ) [1] => Array ( [name] => Percent [attributes] =&

我有一个返回如下数组的函数

Array
(
[0] => Array
    (
        [name] => Percent
        [attributes] => Array
            (
                [Percent] => 50
            )
    )

[1] => Array
    (
        [name] => Percent
        [attributes] => Array
            (
                [Percent] => 50
            )
    )
)
Array
(
    [0] => Array
      (
          [name] => Name
          [value] => Johan
      )
    [1] => Array
      (
          [name] => Address
          [value] => Mayfair Lane
      )
)
Array
(
    [0] => Array
      (
          [name] => Name
          [value] => Johan
      )
    [1] => Array
      (
          [0] => Array
           (
               [name] => Percent
               [attributes] => Array
                (
                   [Percent] => 50
                )
           )
          [1] => Array
           (
               [name] => Percent
               [attributes] => Array
                (
                   [Percent] => 50
                )
           )
      )
    [2] => Array
      (
          [name] => Address
          [value] => Mayfair Lane
      )
)
我需要像这样将上面的每个元素添加到另一个数组中

Array
(
[0] => Array
    (
        [name] => Percent
        [attributes] => Array
            (
                [Percent] => 50
            )
    )

[1] => Array
    (
        [name] => Percent
        [attributes] => Array
            (
                [Percent] => 50
            )
    )
)
Array
(
    [0] => Array
      (
          [name] => Name
          [value] => Johan
      )
    [1] => Array
      (
          [name] => Address
          [value] => Mayfair Lane
      )
)
Array
(
    [0] => Array
      (
          [name] => Name
          [value] => Johan
      )
    [1] => Array
      (
          [0] => Array
           (
               [name] => Percent
               [attributes] => Array
                (
                   [Percent] => 50
                )
           )
          [1] => Array
           (
               [name] => Percent
               [attributes] => Array
                (
                   [Percent] => 50
                )
           )
      )
    [2] => Array
      (
          [name] => Address
          [value] => Mayfair Lane
      )
)

我需要的是第一个数组元素,它们插入到第二个数组的同一个级别,中间在第二个数组的第一个和第二个元素之间。

Array
(
    [0] => Array
      (
          [name] => Name
          [value] => Johan
      )
    [1] => Array
    (
        [name] => Percent
        [attributes] => Array
            (
                [Percent] => 50
            )
    )
    [2] => Array
    (
        [name] => Percent
        [attributes] => Array
            (
                [Percent] => 50
            )
        )
    )
    [3] => Array
      (
          [name] => Address
          [value] => Mayfair Lane
      )
)
问题是,如果我只是将第一个数组原样添加到中间(使用它自己的变量),它会这样添加它

Array
(
[0] => Array
    (
        [name] => Percent
        [attributes] => Array
            (
                [Percent] => 50
            )
    )

[1] => Array
    (
        [name] => Percent
        [attributes] => Array
            (
                [Percent] => 50
            )
    )
)
Array
(
    [0] => Array
      (
          [name] => Name
          [value] => Johan
      )
    [1] => Array
      (
          [name] => Address
          [value] => Mayfair Lane
      )
)
Array
(
    [0] => Array
      (
          [name] => Name
          [value] => Johan
      )
    [1] => Array
      (
          [0] => Array
           (
               [name] => Percent
               [attributes] => Array
                (
                   [Percent] => 50
                )
           )
          [1] => Array
           (
               [name] => Percent
               [attributes] => Array
                (
                   [Percent] => 50
                )
           )
      )
    [2] => Array
      (
          [name] => Address
          [value] => Mayfair Lane
      )
)

我已经看过<代码> AARYAY合并< /COD>但当然,我不能指定第二个数组元素在我需要的中间走。

你需要AARYAYSPLICE(),例如:

阵列拼接($second,1,0,$first)

您需要阵列拼接(),例如:


阵列拼接($second,1,0,$first)

您不需要执行循环。把他们一分为二。合并第一部分、要插入的中间部分和第二部分

$arr1 = array(
    array(
        'name' => 'Percent',
        'attributes' => array('Percent'=>50)
    ),
    array(
        'name' => 'Percent',
        'attributes' => array('Percent'=>50)
    )
 );

$arr2 = array(
    array(
        'name'=>'Name',
        'value'=>'Johan'
        ),
    array(
        'name'=>'Address',
        'value'=>'Mayfair Lane'
        )
);

$mid = count($arr2)/2;

$chunks = array_chunk($arr2, $mid);

$merged = array_merge($chunks[0], $arr1, $chunks[1]);

var_dump($merged);
结果

array(4) {
  [0]=>
  array(2) {
    ["name"]=>
    string(4) "Name"
    ["value"]=>
    string(5) "Johan"
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(7) "Percent"
    ["attributes"]=>
    array(1) {
      ["Percent"]=>
      int(50)
    }
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(7) "Percent"
    ["attributes"]=>
    array(1) {
      ["Percent"]=>
      int(50)
    }
  }
  [3]=>
  array(2) {
    ["name"]=>
    string(7) "Address"
    ["value"]=>
    string(12) "Mayfair Lane"
  }
}

您不需要执行循环。把他们一分为二。合并第一部分、要插入的中间部分和第二部分

$arr1 = array(
    array(
        'name' => 'Percent',
        'attributes' => array('Percent'=>50)
    ),
    array(
        'name' => 'Percent',
        'attributes' => array('Percent'=>50)
    )
 );

$arr2 = array(
    array(
        'name'=>'Name',
        'value'=>'Johan'
        ),
    array(
        'name'=>'Address',
        'value'=>'Mayfair Lane'
        )
);

$mid = count($arr2)/2;

$chunks = array_chunk($arr2, $mid);

$merged = array_merge($chunks[0], $arr1, $chunks[1]);

var_dump($merged);
结果

array(4) {
  [0]=>
  array(2) {
    ["name"]=>
    string(4) "Name"
    ["value"]=>
    string(5) "Johan"
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(7) "Percent"
    ["attributes"]=>
    array(1) {
      ["Percent"]=>
      int(50)
    }
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(7) "Percent"
    ["attributes"]=>
    array(1) {
      ["Percent"]=>
      int(50)
    }
  }
  [3]=>
  array(2) {
    ["name"]=>
    string(7) "Address"
    ["value"]=>
    string(12) "Mayfair Lane"
  }
}


我可以用foreach loopyeh@Dragon foreach来完成,但我不确定这是否是最有效的。你会在那里使用
array\u splice
吗?是的,你也可以发布它。所以我们可以看到你的foreach算法中的问题。@yoyoma我可以问你,你为什么需要它吗?这个问题看起来真的很不合理和奇怪,除了面试或培训问题。你在开玩笑吗@Axalix?这是一个合法的商业问题,我可以用foreach loopyeh@Dragon foreach解决,但我不确定这是否是最有效的。你会在那里使用
array\u splice
吗?是的,你也可以发布它。所以我们可以看到你的foreach算法中的问题。@yoyoma我可以问你,你为什么需要它吗?这个问题看起来真的很不合理和奇怪,除了面试或培训问题。你在开玩笑吗@Axalix?这是一个合法的商业问题,我已经考虑过了,但它会变得混乱,这取决于你需要添加多少内部元素,位置参数需要计数器,而且不确定它是否是最干净的解决方案?我不确定有什么比单次函数调用更干净。我的示例将把$first到$second的所有元素放在位置1,即在已经在$second中的第一个元素之后。这些要素将被置于同一“级别”。有关数组_splice()的详细信息,请参阅。根据“middle”的定义,您可以相应地更新第二个参数,例如,
array\u splice($second,count($second)/2,0,$first)是的,我知道你在说什么,我的意思是不干净的事实是,如果内部数组有5个元素,10个元素,50个元素呢?我需要foreach循环中的一个计数器来跟踪该位置参数。不是说它不正确,只是寻找最好的解决方案,你的问题是:“问题是我需要第一个数组元素插入到第二个数组的同一个级别,中间,在第二个数组的第一个和第二个元素之间。”这就是我的答案中的代码。内部数组中的项数(即$first)无关紧要,无需循环即可满足此要求。可能你想要的东西与你在问题中提出的不同,但我恐怕无法理解你的想法:)@yoyoma建议的决定并不取决于你嵌入的数组中元素的数量。试试看。“1”表示“跳过第一个元素”和“0”-“不要接触原始数组”。考虑一下-但它会变得混乱,这取决于需要添加多少内部元素-position param需要计数器,而且不确定它是否是最干净的解决方案?我不确定有什么比单个函数调用更干净。我的示例将把$first到$second的所有元素放在位置1,即在已经在$second中的第一个元素之后。这些要素将被置于同一“级别”。有关数组_splice()的详细信息,请参阅。根据“middle”的定义,您可以相应地更新第二个参数,例如,
array\u splice($second,count($second)/2,0,$first)是的,我知道你在说什么,我的意思是不干净的事实是,如果内部数组有5个元素,10个元素,50个元素呢?我需要foreach循环中的一个计数器来跟踪该位置参数。不是说它不正确,只是寻找最好的解决方案,你的问题是:“问题是我需要第一个数组元素插入到第二个数组的同一个级别,中间,在第二个数组的第一个和第二个元素之间。”这就是我的答案中的代码。内部数组中的项数(即$first)无关紧要,无需循环即可满足此要求。可能你想要的东西与你在问题中提出的不同,但我恐怕无法理解你的想法:)@yoyoma建议的决定并不取决于你嵌入的数组中元素的数量。试试看。“1”表示“跳过第一个元素”和“0”-“不要接触原始数组”。