将python转换为PHP(需要了解这个python条件/迭代语法)

时间:2017-11-23 21:43:44

标签: php python

我正在阅读一段我需要了解的python代码,以便在PHP中移植它。我可以理解基本的python语法。但是我遇到了以下一段代码,我并没有真正理解它。

player = next((p for p in player_list if p['team'] == team), None)

如同,它是否正在执行以下操作:

  • 检查if p['team'] == team
  • 如果是,则使用for p in player_list
  • 进行迭代
  • 取每个p的值并将其放入p
  • 嗯......我不知道next在这里做了什么:(

我只需要理解上面语句的语法/语法,这样我就可以在PHP中编写等效语句。我无法弄明白,因为PHP不支持这样的结构。任何帮助表示赞赏

1 个答案:

答案 0 :(得分:2)

这是带有条件的生成器表达式。 p for p in player_list遍历player_list中的所有值并生成它们,但只生成if p['team'] == teamnext推进迭代器并获取其下一个值。通常,如果迭代器到达其末尾[没有找到值],则会以StopIteration异常结束,而第二个None参数会阻止该异常; next将返回None而非提出异常。

简而言之:此代码段会找到player_list中第一个属于团队team的玩家,如果没有,则会None分配给player。在PHP中,最接近的等价物是:

$player = array_reduce($playerList, function ($a, $p) use ($team) {
    return $a ?: $p['team'] == $team ? $p : null;
});

或:

$player = array_filter($playerList, function ($p) use ($team) { 
    return $p['team'] == $team;
})[0] ?? null;

虽然注意事项既不像next那样短路,但两种变化都会迭代整个数组。因此,您可能会使用foreach循环来代替ifbreak