Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP是否有与Python';s列表理解语法?_Php_Arrays_List Comprehension_Higher Order Functions_Language Comparisons - Fatal编程技术网

PHP是否有与Python';s列表理解语法?

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

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中是否有类似的列表理解语法?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日启动)

在.NET中,与Python的“语法甜美列表理解”相当的是LINQ。在PHP中,它有几个端口,包括library*。从语法上讲,它更接近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'
是此库支持的
函数($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没有添加任何关于列表理解的内容。