我怎样才能避免在数组映射中通过引用?

时间:2015-12-23 13:38:49

标签: php arrays array-map

我想知道的这段代码无论如何我都可以避免通过引用传递

public function formatNumbers($numbersData){
    $result = array();
    array_map(
        function($row) use (&$result) {
            $result[$row['GroupId']][$row['Type']] = $row['value'];
        }, $numbersData
    );
    return $result;
}

Input: $numbersData =
Array
(
    [0] => Array
        (
            [GroupId] => 2
            [Type] => 1
            [value] => 82000
        )

    [1] => Array
        (
            [GroupId] => 2
            [Type] => 3
            [value] => 52000
        )

    [2] => Array
        (
            [GroupId] => 2
            [Type] => 4
            [value] => 30105
        )

    [3] => Array
        (
            [GroupId] => 2
            [Type] => 7
            [value] => 13266
        )

)

输出

Array
(
    [2] => Array
        (
            [1] => 82000
            [3] => 52000
            [4] => 30105
            [7] => 13266
        )

)

我知道我可以使用foreach来做到这一点,但是我想知道如果无论如何都要使用数组映射而不通过引用传递。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

错误的操作。您不是在寻找值的映射,而是在寻找数组缩减:

return array_reduce($numbersData, function(array $acc, array $row) {
    $acc[$row['GroupId']][$row['Type']] = $row['value'];
    return $acc;
}, []);

答案 1 :(得分:0)

您可以使用array_column()功能执行此操作。

$arr = array(array('GroupId'=>2,'Type' => 1,'value' => 82000),array('GroupId'=>2,'Type' => 3,'value' => 52000),array('GroupId'=>2,'Type' => 4,'value' => 30105),array('GroupId'=>2,'Type' => 7,'value' => 13266));
print_r(array_column($arr, 'value', 'Type'));