81

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 中的任何新功能都可以做到这一点吗?

谢谢!

4

4 回答 4

94

也许是这样的?

$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));
于 2009-08-12T15:32:02.557 回答
6

PHP 5.5 可能支持列表推导 - 请参阅邮件列表公告:

并进一步讨论:

于 2012-07-24T09:44:37.520 回答
2

不是开箱即用,但看看: http ://code.google.com/p/php-lc/或http://code.google.com/p/phparrayplus/

于 2009-08-12T15:32:44.520 回答
-1

在 .NET 中,相当于 Python 的“语法甜美列表推导”的是 LINQ。在 PHP 中,它有几个端口,包括YaLinqo库*。在语法上,它更接近于 SQL,而不是一系列带有forand的传统结构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( ifequivalent) 开头,以 which 结尾groupJoin,执行与分组的连接转换。

* 由我开发

于 2015-06-04T01:54:36.860 回答