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

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

问题描述:

I have the following array:

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

First I need to change the value from [ "title" => "1", "desc" = > "" ] to 1 (title's value).

I did this using array_walk:

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

This will replace my value correctly. Our current array now is:

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

Now, I need to transform each element of this array into its own subarray. I have no idea on how to do this without a for loop. This is the desired result:

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

You can change your array_walk callback to produce that array.

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

Run the transformed array through array_values if you need to get rid of the string keys.

$arr = array_values($arr);

To offer an alternative solution you could achieve all of this with 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>';
?>

outputs

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

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

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

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

)

You need to use array_map like

$new_arr= array_map(function($key,$val){
return [$key => $val['title']];},array_keys($arr),$arr);