PHP是否有与Python';s列表理解语法?
Python具有语法上的甜列表理解:PHP是否有与Python';s列表理解语法?,php,arrays,list-comprehension,higher-order-functions,language-comparisons,Php,Arrays,List Comprehension,Higher Order Functions,Language Comparisons,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
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中是否有类似的列表理解语法?PHP5.3中的任何新特性都可以实现吗
谢谢 也许是这样的
$out=array_map(function($x) {return $x*$x;}, range(0, 9))
这将在PHP5.3+中工作,在较旧的版本中,您必须单独为其定义回调
function sq($x) {return $x*$x;}
$out=array_map('sq', range(0, 9));
不是开箱即用的,但看看:
或PHP 5.5可能支持列表理解-请参阅邮件列表公告:
- (2012年6月28日)
- (ircmaxell;2012年7月23日)-有一个斐波那契例子
- (NikiC;2012年7月10日)
- (维基于2012年6月5日启动)
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'
是此库支持的函数($v){return$v*$v;}
的快捷方式。不幸的是,PHP不支持闭包的短语法,但是可以使用这种“字符串lambdas”来缩短代码
还有更多的方法,从where
(if
等效)开始,以执行分组连接转换的groupJoin
结束
*由我开发的回答得很好+1.不完全是列表理解,但这是一个非常优雅和简短的解决方案。注意,这是PHP5.3+,因为使用了匿名函数。PHP5.3是必需的。但是很好的解决方案:)对于理解来说,它比映射、减少和过滤操作更方便。在array_map、array_reduce和array_filter之间,你可以拥有一切,一个使用_invoke()魔术方法的精简库,你可以得到一个完整的函数API。你可以将它与构造函数一起使用吗<代码>数组映射(“新MyClass”,范围(0,9))?实际上这不是列表理解。(Python也有
map
函数。)虽然map
和列表理解是相似的。我想说一个更好的例子来说明Python列表理解是多么棒,那就是条件句!x=[x*2代表范围(1,9)内的x,如果x<3]或任何不能使用数组映射的下注!另请参见:将变量传递到匿名函数以供现在阅读此评论的人使用:PHP5.5(或5.6)不包括列表理解。它确实包含了生成器。PHP7呢?对不起,我认为PHP7没有添加任何关于列表理解的内容。