我正在寻找一种用函数式编程方法来替换嵌套的foreach循环的方法,下面是示例数据:
$mode[1] = [1, 2, 5, 6];
$mode[0] = [3, 4, 7, 8];
目前我的代码是:
foreach ($mode as $key => $value):
foreach ($value as $v):
$modes[$v] = $key;
endforeach;
endforeach;
echo '<pre>' . print_r($modes, 1) . '</pre>';
这将生成所需的输出(可将其视为翻转2D阵列):
array (
1 => 1,
2 => 1,
5 => 1,
6 => 1,
3 => 0,
4 => 0,
7 => 0,
8 => 0,
)
有人知道如何用函数式编程替代foreach代码块吗?
4条答案
按热度按时间lrpiutwd1#
您可以使用
array_map()
执行此操作我不知道为什么你会想这样做,
foreach
版本对我来说似乎更清楚。u1ehiz5o2#
我认为
array_walk()
与Union Operator合作,array_fill_keys()
似乎是完成此任务的明智选择:代码:(Demo)
为了避免在全局作用域中声明任何变量,在第一级键上调用
array_reduce()
,并使用这些键访问第二级子数组。输出(来自任一代码段):
n3schb8v3#
我将使用array_fill_keys创建模式数组,然后将它们合并为一个数组:
为了清晰起见,您可以将其拆分为多行,但这应该会让您有一个想法。
额外的好处:如果您不确切知道
$mode
的内容,您可以进一步抽象此代码:0wi1tuuw4#
使用array_flip在数组中交换键和瓦尔:
https://3v4l.org/DeIsG
但是因为你想用多维数组所以你应该有一个循环
?〉
输出: