PHP 将数组元素包装在单独的数组中

问题描述 投票:0回答:4

我有以下数组:

$arr = [
    "elem-1" => [ "title" => "1", "desc" = > "" ],
    "elem-2" => [ "title" => "2", "desc" = > "" ],
    "elem-3" => [ "title" => "3", "desc" = > "" ],
    "elem-4" => [ "title" => "4", "desc" = > "" ],
]

首先我需要将值从

[ "title" => "1", "desc" = > "" ]
更改为
1
(标题的值)。

我使用

array_walk
做到了这一点:

array_walk($arr, function(&$value, $key) {
    $value = $value["title"];
});

这将正确替换我的值。我们现在的数组是:

$arr = [
    "elem-1" => "1",
    "elem-2" => "2",
    "elem-3" => "3",
    "elem-4" => "4",
]

现在,我需要将该数组的每个元素转换为它自己的子数组。我不知道如何在没有

for
循环的情况下做到这一点。这就是想要的结果:

$arr = [
    [ "elem-1" => "1" ],
    [ "elem-2" => "2" ],
    [ "elem-3" => "3" ],
    [ "elem-4" => "4" ],
]
php arrays
4个回答
5
投票

您可以更改

array_walk
回调来生成该数组。

array_walk($arr, function(&$value, $key) {
    $value = [$key => $value["title"]];
});

如果需要删除字符串键,请通过

array_values
运行转换后的数组。

$arr = array_values($arr);

2
投票

要提供替代解决方案,您可以通过

array_map

实现所有这些
 <?php

$arr = [
    "elem-1" => [ "title" => "1", "desc" => "" ],
    "elem-2" => [ "title" => "2", "desc" => "" ],
    "elem-3" => [ "title" => "3", "desc" => "" ],
    "elem-4" => [ "title" => "4", "desc" => "" ],
];



function convertToArray($key,$elem){
   return [$key => $elem['title']];
}

$arr = array_map("convertToArray", array_keys($arr), $arr);
echo '<pre>';
print_r($arr);
echo '</pre>';
?>

输出

  Array
(
    [0] => Array
        (
            [elem-1] => 1
        )

    [1] => Array
        (
            [elem-2] => 2
        )

    [2] => Array
        (
            [elem-3] => 3
        )

    [3] => Array
        (
            [elem-4] => 4
        )

)

0
投票

使用

array_walk()
并通过引用进行修改没有多大意义,因为最终结果需要在两个级别上都有全新的键。 换句话说,输出结构与输入完全不同,并且没有可挽救/可变的部分。 用
array_values()
清理修改后的数组只会增加时间复杂度成本。

array_map()
也必须承担时间复杂度的成本,因为
array_keys()
必须作为附加参数传入。

如果要使用

array_walk()
,请使用
use()
修改结果数组。 这将使您享受尽可能低的时间复杂度。

array_walk()
更简洁,阅读起来更干净,我可能会在我自己的项目中使用经典的
foreach()

代码:(演示

$result = [];
array_walk(
    $arr,
    function($row, $key) use(&$result) {
        $result[] = [$key => $row['title']];
    }
);

或者:

$result = [];
foreach ($arr as $key => $row) {
    $result[] = [$key => $row['title']];
}
var_export($result);

或者:

var_export(array_chunk(array_map(fn($row) => $row['title'], $arr), 1, true));

-2
投票

你需要像使用 array_map

$new_arr= array_map(function($key,$val){
return [$key => $val['title']];},array_keys($arr),$arr); 
© www.soinside.com 2019 - 2024. All rights reserved.