将数组元素的每个值拆分

5

我有一个数组,如下:

Array
(
   [2] => 2,6
   [3] => 1
   [4] => 14
   [5] => 10
   [6] => 8
)

我希望使用array_map将数组的每个元素展开并返回一个新数组,这样我就可以避免使用循环和额外的回调函数。
期望输出如下:
  Array
(
[2] => Array
    (
        [0] => 2
        [1] => 6
    )

[3] => Array
    (
        [0] => 1
    )

[4] => Array
    (
        [0] => 14
    )

[5] => Array
    (
        [0] => 10
    )

[6] => Array
    (
        [0] => 8
    )

)

1
你在使用 array_map() 的哪里卡住了呢?另外,你知道最后 array_map 也会遍历你的数组。 - Rizier123
1
避免使用循环和创建额外的函数来进行回调 - array_map 也使用回调函数作为其第一个参数。 - RomanPerekhrest
@Alok Jha 你试过我的答案了吗? - Mohit Tanwani
避免使用循环和创建额外的回调函数——也就是说,由于我们已经有了 explode 函数,所以不需要再创建其他函数。 - Alok Jha
1
@mohit,是的,它对我有效,谢谢。 - Alok Jha
4个回答

8
您可以使用

标签


$result = array_map(function($val) {
    return explode(',', $val);
}, $input);

这将导致
Array
(
    [2] => Array
        (
            [0] => 2
            [1] => 6
        )

    [3] => Array
        (
            [0] => 1
        )

    [4] => Array
        (
            [0] => 14
        )

    [5] => Array
        (
            [0] => 10
        )

    [6] => Array
        (
            [0] => 8
        )

)

这将适用于支持匿名函数的PHP版本>=5.3。


4

你也可以这样做

$result = array_map('str_getcsv', $input);

这也会导致...
Array
(
    [2] => Array
        (
            [0] => 2
            [1] => 6
        )

    [3] => Array
        (
            [0] => 1
        )

    [4] => Array
        (
            [0] => 14
        )

    [5] => Array
        (
            [0] => 10
        )

    [6] => Array
        (
            [0] => 8
        )

)

2

尝试以下代码

$newArr = array_map(function($val, $key){
    return explode(",", $val);
}, $arr);

0

$data = array(2 => '2,6',3 => '1',4 => '14',5 => '10',6 => '8');

foreach($data as $key => $val) {
    $new = explode(',',$val);
    $data[$key] = $new;
}
$output = $data;

echo '<pre>';
print_r($output);


我不想要任何额外的循环,因为我们有array_map。 - Alok Jha
虽然这段代码片段可能解决了问题,但是包括解释真的有助于提高文章质量。请记住,您正在为未来的读者回答问题,这些人可能不知道您的代码建议原因。同时,请尽量不要在代码中加入过多的解释性注释,因为这会降低代码和解释的可读性! - Blue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接