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の新機能のいずれかでそれを行うことはありますか?
ありがとう!
たぶんこんな感じ?
$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はリスト内包表記をサポートしているかもしれません-メーリングリストのアナウンスをご覧ください:
そしてさらなる議論:
そのままではなく、次をご覧ください: http://code.google.com/p/php-lc/ または http://code.google.com/ p/phparrayplus /
.NETでは、Pythonの「構文的に甘いリスト内包表記」に相当するのがLINQです。そして、PHPには YaLinqo library *を含むいくつかの移植版があります。構文的には、for
とif
を使用した従来のコンストラクトのシーケンスではなく、SQLに近くなりますが、機能的には次のようになります。
_$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
で終わるメソッドが他にもたくさんあります。これは、グループ化による結合変換を実行します。
*私が開発