删除PHP数组中的第一级数组键并重新排序内部数组中的索引[重复]

deikduxw  于 2023-10-15  发布在  PHP
关注(0)|答案(3)|浏览(134)

此问题已在此处有答案

Extract leaf nodes of multi-dimensional array in PHP(6个回答)
How to Flatten a Multidimensional Array?(31个回答)
Remove first levels of identifier in array [duplicate](7个回答)
昨天关门了。
我把数据存储在一个PHP数组中,如下所示:

(
    [category1] => Array
        (
            [0] => Array
                (
                    [name] => Test1
                )

            [1] => Array
                (
                    [name] => Test2
                )

            [2] => Array
                (
                    [name] => Test3
                )

        )

    [category2] => Array
        (
            [0] => Array
                (
                    [name] => Test4
                )

        )

    [category3] => Array
        (
            [0] => Array
                (
                    [name] => Test5
                )

        )

)

我可以使用什么函数来修改这个数组,以删除category 1/2/3的第一个数组键,然后重新排序数字数组键,因此得到的数组看起来像这样:

Array
(

            [0] => Array
                (
                    [name] => Test1
                )

            [1] => Array
                (
                    [name] => Test2
                )

            [2] => Array
                (
                    [name] => Test3
                )

            [3] => Array
                (
                    [name] => Test4
                )

            [4] => Array
                (
                    [name] => Test5
                )

)

我试过array_shift,但它只返回3个数据,没有考虑其他类别:

[0] => Array
            (
                [name] => Test1
            )

        [1] => Array
            (
                [name] => Test2
            )

        [2] => Array
            (
                [name] => Test3
            )
pvcm50d1

pvcm50d11#

尝试array_merge()函数和array_values()如下:

$data = [
    "category1" => [
        [
            "name" => "Test1"
        ],
        [
            "name" => "Test2"
        ],
        [
            "name" => "Test3"
        ]
    ],
    "category2" => [
        [
            "name" => "Test4"
        ]
    ],
    "category3" => [
        [
            "name" => "Test5"
        ]
    ]
];

$mergedArray = array_merge(...array_values($data));
ou6hu8tu

ou6hu8tu2#

首先遍历数组并创建一个像这样的新数组

$newArray = array();
foreach ($yourArray as $item) {
    $newArray = array_merge($newArray, $item);
}

你也可以使用array_reduce代替上面的循环。

$newArray = array_reduce($yourArray, function($carry, $item) {
    return array_merge($carry, $item);
}, array());

然后重新排列新阵列

$newArray = array_values($newArray);
4xrmg8kj

4xrmg8kj3#

输入数组只包含叶元素,这些元素是具有一个键值对的数组,并且其中每个元素的键都是相同的(这意味着结果数组中不需要这些键)。
如果这真的是输入,这种方法也会起作用(否则大卫特奥的答案是要走的路):

$result = [];

array_walk_recursive(
  $data,
  function ($item) use (&$result) { return $result[] = $item; }
);

print_r($result);

输出量:

Array
(
    [0] => Test1
    [1] => Test2
    [2] => Test3
    [3] => Test4
    [4] => Test5
)

相关问题