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ライブラリー*を含むいくつかのポートがあります。for構文的には、 andを使用した従来の構造体のシーケンスよりも SQL に近いです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、グループ化による結合変換を実行するで終わるメソッドは他にもたくさんあります。

※私が開発した

于 2015-06-04T01:54:36.860 に答える