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); 
要得到:
arrays([0] => 0 [1] => 1 [2] => 4 [3] => 9 [4] => 16 [5] => 25 [6] => 36 [7] => [8] => 64 [9] => 81)
反正有没有在PHP中获得类似的列表理解语法? 有没有办法用PHP 5.3的任何新function呢?
谢谢!
也许这样?
 $out=array_map(function($x) {return $x*$x;}, range(0, 9)) 
这将工作在PHP 5.3+,在一个较旧的版本中,你必须分别定义array_map的callback
 function sq($x) {return $x*$x;} $out=array_map('sq', range(0, 9)); 
PHP 5.5可能支持列表parsing – 请参阅邮件列表公告:
- [PHP-DEV] PHP的列表推导和生成器expression式 (2012年6月28日)
并进一步讨论:
- 什么发电机可以为你做 (通过ircmaxell; 2012年7月23日) – 有一个斐波纳契的例子。
- 什么PHP 5.5可能看起来像 (由NikiC; 2012年7月10日)
- 征求意见:发电机 (维基于2012年6月5日开始)
 在.NET中,相当于Python的“语法上甜美的列表parsing”是LINQ。 在PHP中,有几个端口,包括YaLinqo library *。 从语法上来说,它更接近于SQL,而不是使用for和if的一系列传统结构,但在function上它是相似的: 
 $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; }的快捷方式function ($v) { return $v * $v; }  function ($v) { return $v * $v; }这个库支持。 不幸的是,PHP不支持closures的简短语法,但是可以使用这种“stringlambdas”来缩短代码。 
 还有更多的方法,从where开始( if等价的话),以groupJoin结尾, groupJoin用分组进行连接转换。 
*由我开发