Python具有句法甜美的清单综合:

S = [x**2 for x in range(10)]
print S;
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

在PHP中,我需要进行一些循环:

$output = array();
$Nums = range(0,9);

foreach ($Nums as $num) 
{
    $out[] = $num*=$num;
}
print_r($out);

要得到:

阵列([0] => 0 [1] => 1 [2] => 4 [3] => 9 [4] => 16 [5] => 25 [6] => 36 [7] => 49 [8] => 64 [9] => 81)

无论如何,是否可以在PHP中获得类似的列表理解语法?无论如何,是否可以使用PHP 5.3中的任何新功能进行操作?

谢谢!

有帮助吗?

解决方案

也许是这样的?

$out=array_map(function($x) {return $x*$x;}, range(0, 9))

这将在php 5.3+中起作用,在较旧的版本中,您必须定义回调 array_map 分别地

function sq($x) {return $x*$x;}
$out=array_map('sq', range(0, 9));

其他提示

PHP 5.5可以支持列表综合 - 请参阅“邮件列表”公告:

并进一步讨论:

在.NET中,相当于Python的“句法甜美列表综合”是Linq。在PHP中,其中有几个端口,包括 Yalinqo 图书馆*。从语法上讲,它更接近SQL,而不是一系列传统结构 forif, ,但在功能上是类似的:

$a = Enumerable::range(0, 10)->select('$v * $v');

这会产生一个可以输出的迭代器,要么是要控制的:

var_dump($a->toArray()); // by transforming the iterator to an array
echo $a->toString(', '); // or by imploding into a string

或迭代使用 foreach:

foreach ($a as $i)
    echo $i, PHP_EOL;

这里, '$v * $v' 是一个快捷方式 function ($v) { return $v * $v; } 该库支持的。不幸的是,PHP不支持简短的语法封闭,但是可以使用这种“字符串lambdas”来使代码缩短。

where (if 等效)并以 groupJoin 通过分组进行连接转换。

*由我开发

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top