PHP是否等于Python的列表理解语法?
题
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可以支持列表综合 - 请参阅“邮件列表”公告:
- PHP-DEV]列出了PHP的综合和发电机表达式 (2012年6月28日)
并进一步讨论:
- 发电机可以为您做什么 (由Ircmaxell; 2012年7月23日) - 有一个斐波那契例。
- 5.5的php 5.5是什么样的 (Nikic; 2012年7月10日)
- 请求评论:发电机 (Wiki开始于2012年6月5日)
在.NET中,相当于Python的“句法甜美列表综合”是Linq。在PHP中,其中有几个端口,包括 Yalinqo 图书馆*。从语法上讲,它更接近SQL,而不是一系列传统结构 for
和 if
, ,但在功能上是类似的:
$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
通过分组进行连接转换。
*由我开发
不隶属于 StackOverflow