在PHP中的另一个数组之间注入一个数组

时间:2018-02-07 10:31:06

标签: php arrays multidimensional-array

我必须在另一个数组之间合并(注入)一个数组。 注入的数组在顶部添加了一个额外的级别。

实际代码不同,但在这里我创建了一个简单的例子来说明我面临的问题。

以下是示例代码:

$mid_array = [
  'heading3'  => 'Heading 3',
  'heading4'  => 'Heading 4'
];

$main_array = [
    'heading1'  => 'Heading 1',
    'heading2'  => 'Heading 2',
    $mid_array,
    'heading5'  => 'Heading 5'
];

echo '<pre>'; print_r($main_array); echo '</pre>';

输出我

Array
(
    [heading1] => Heading 1
    [heading2] => Heading 2
    [0] => Array
        (
            [heading3] => Heading 3
            [heading4] => Heading 4
        )

    [heading5] => Heading 5
)

这正是我需要的

Array
(
    [heading1] => Heading 1
    [heading2] => Heading 2
    [heading3] => Heading 3
    [heading4] => Heading 4
    [heading5] => Heading 5
)

5 个答案:

答案 0 :(得分:3)

基于您的阵列可能会发生变化但会继续拥有像heading1,heading2这样的键的假设,这将是我的解决方案

$newArray = array_merge($main_array,$mid_array);
ksort($newArray);

这将返回您需要的数组。

答案 1 :(得分:1)

我认为您正在寻找array_splice,因此:

array_splice($main_array, 2, 0, $mid_array);

注意:array_splice不会保留密钥,如果密钥对您很重要,请使用以下命令:

function array_insert(&$input, array $arrayToAdd, int $atPosition) {
    $before = array_slice($input, 0, $atPosition, true);
    $after = array_slice($input, $atPosition, null, true);
    $input = $before + $arrayToAdd + $after;
}

<强>用法

array_insert($main_array, $mid_array, 2);

答案 2 :(得分:0)

我认为您正在寻找array_merge功能。

http://php.net/manual/en/function.array-merge.php

答案 3 :(得分:0)

您可以使用array_reduce

$after = 'heading2';
$result = array_reduce(
    array_keys($main_array),
    function ($carry, $key) use ($main_array, $after, $mid_array) {
        $carry[$key] = $main_array[$key];

        return $key === $after
            ? array_merge($carry, $mid_array)
            : $carry;
    },
    []
);

这是the demo

答案 4 :(得分:0)

如果键排序存在问题(类似于array_merge),则可以通过递归遍历来展平插入的数组。你走的路可以随心所欲地挑选你需要的东西。

<?php
$insert = [
  'foo'  => 'And it\'s been the ruin of many a poor boy',
  'bar'  => 'And god I know I\'m one'
];

$inserted = [
    'big'  => 'There is a house in New Orleans',
    'fat'  => 'They call the rising sun',
    $insert,
    'mama'  => 'My mother was a taylor'
];

$flattened = [];
array_walk_recursive(
    $inserted,
    function($v, $k) use (&$flattened) {
        $flattened[$k] = $v;
    }
);
var_export($flattened);

输出:

array (
'big' => 'There is a house in New Orleans',
'fat' => 'They call the rising sun',
'foo' => 'And it\'s been the ruin of many a poor boy',
'bar' => 'And god I know I\'m one',
'mama' => 'My mother was a taylor',
)