如何避免在数组映射中通过引用传递?
How can i avoid pass by refrence in 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 做到这一点,但我想知道如果无论如何都可以为此使用数组映射而不通过 reference.Any 帮助将不胜感激。
您可以使用 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'));
操作错误。您不是在寻找值的映射,而是在寻找数组缩减:
return array_reduce($numbersData, function(array $acc, array $row) {
$acc[$row['GroupId']][$row['Type']] = $row['value'];
return $acc;
}, []);
我有一段代码,我想知道其中是否存在我可以避免通过引用传递的代码
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 做到这一点,但我想知道如果无论如何都可以为此使用数组映射而不通过 reference.Any 帮助将不胜感激。
您可以使用 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'));
操作错误。您不是在寻找值的映射,而是在寻找数组缩减:
return array_reduce($numbersData, function(array $acc, array $row) {
$acc[$row['GroupId']][$row['Type']] = $row['value'];
return $acc;
}, []);