当前位置: 首页 > 知识库问答 >
问题:

替换嵌套的Foreach循环

水浩歌
2023-03-14

我正在寻找一种用函数式编程方法替换嵌套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>';

这将生成如下所示的输出:

有谁知道如何用函数式编程替代方案替换foreach代码块?

共有3个答案

锺离慈
2023-03-14

我会使用array_fill_keys创建模式数组,然后将它们合并为一个:

$modes = array_fill_keys($mode[1], 1) + array_fill_keys($mode[0], 0);

为了易读性,你可以把它分成多行,但这应该能让你有个概念。

另外:如果您不清楚$mode的内容,您可以进一步抽象代码:

$modes = [];
foreach ($mode as $key => $value) {
    $modes += array_fill_keys($value, $key);
}
艾哲
2023-03-14

我认为< code>array_walk()与Union运算符合作,并且< code>array_fill_keys()似乎是完成此任务的理想选择:

代码:(演示)

$mode[1]=[1, 2, 5, 6];
$mode[0]=[3, 4, 7, 8];

$result=[]; // declare empty array so that union operator works
array_walk($mode,function($a,$k)use(&$result){$result+=array_fill_keys($a,$k);});
var_export($result);

输出:

array (
  1 => 1,
  2 => 1,
  5 => 1,
  6 => 1,
  3 => 0,
  4 => 0,
  7 => 0,
  8 => 0,
)
宋博易
2023-03-14

你可以用array_map()来做到这一点

array_map(function($key, $value) use (&$modes) {
    array_map(function($v) use (&$modes) {
        $modes[$v] = $key;
    }, $value);
}, array_keys($mode), array_values($mode));

我不知道你为什么要这样做,foreach版本对我来说似乎更清晰。

 类似资料:
  • 我有一个这样的数组 我想做的是前面的模型,为其数量绘制徽标,因此三星=3,索尼=7,以此类推,将绘制3个索尼徽标和7个三星徽标。 我想出了这样的办法 但是当然,所有这些都是为了每个数组条目,呼应出名称,所以我最终打印了5个三星,打印了5个索尼,等等。 如何使其使用 qty 数组的值而不是条目数?

  • 这是我的代码。我遇到的问题是,我希望将HP在我的PHP代码中的数字转换为我的HP HTML代码,以及与Cylinder相同的内容。我已经想好了其他的东西,但说到这一部分我就卡住了

  • 我的代码有一个问题,它有两个嵌套的foreach循环: 所以我在“消息”中有2个条目,在“评论”中有4个条目,第一个条目为“消息”,第二个条目为2。我想要: 消息1-评论1-评论2 消息2-注释3-注释4 这就是我所拥有的: 消息1-评论1-评论2 消息2-注释1-注释2-注释3-注释4 我搜索了两个小时,在mysqli中没有找到解决方案:((当我找到时 mysqli_data_seek($com

  • 问题内容: 我有一段代码,但是我想提高性能。我的代码是: matrix2是4维np数组,而matrix1是2d数组。 我想通过使用np.tensordot(matrix1,matrix2)加快此代码的速度,但是后来我迷路了。 问题答案: 您可以只使用jit编译器 您的解决方案一点也不差。我唯一更改的是索引和变量循环范围。如果您有numpy数组和过多的循环,则可以使用编译器(Numba),这确实很简

  • 问题内容: 我正在尝试使用flatmap与Stream API进行嵌套循环,但似乎无法弄清楚。作为示例,我想重新创建以下循环: 我可以这样做,但这看起来很丑: Flatmap看起来很有希望,但是如何在外循环中访问变量? 输出: 问题答案: 您必须在阶段中创建所需的元素,例如:

  • 数据库表: 胶片(id\U胶片主键,名称) 流派(id_genrePK,名称) film_genre(id_filmFK,id_genreFK) 这将输出流派表中的所有流派: 这将输出特定电影的电影类型表中的所有选定类型: 我有一个问题,从数据库输出数据到多个选定的列表中的形式。这是一个电影数据库,我正在进行Foreach迭代,以读取电影流派的所有行,并输出到多个选择字段。但是我在向列表输出“选定