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);
取得するため:
array([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日) - フィボナッチの例があります。
- PHP 5.5がどのように見えるか (Nikicによる; 2012年7月10日)
- コメントのリクエスト:ジェネレーター (Wikiは2012年6月5日に始まりました)
箱から出してはありませんが、次のことを見てください。http://code.google.com/p/php-lc/ また http://code.google.com/p/phparrayplus/
.NETでは、Pythonの「構文的に甘いリストの概念」に相当するものはLinqです。そして、PHPには、それを含むいくつかのポートがあります ヤリンコ 図書館*。構文的には、従来のコンストラクトのシーケンスではなく、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はクロージャーの短い構文をサポートしていませんが、そのような「弦のラムダ」を使用してコードを短くすることができます。
以降、さらに多くの方法があります where
(if
同等)および終了 groupJoin
グループで結合変換を実行します。
*私によって開発されました