arrays list - PHP是否具有Python的列表推導語法?




for object (5)

在.NET中,相當於Python的“語法上的甜蜜列表理解”是LINQ。 在PHP中,有幾個端口,包括YaLinqo庫*。 從語法上講,它更接近於SQL,而不是傳統結構的序列,而forif功能上與它類似:

$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; }的快捷方式function ($v) { return $v * $v; } 這個庫支持哪個。 遺憾的是,PHP不支持閉包的短語法,但可以使用這種“字符串lambdas”來縮短代碼。

還有更多方法,從whereif等效)開始,以groupJoin結束, groupJoin通過分組執行連接轉換。

*由我開發

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));



單程:

def change(f):
    if f is None:
        return unicode(f.strip())
    else:
        return ''

row = [change(x) for x in row]

雖然那麼你有:

row = map(change, row)

或者你可以使用lambda內聯。







php arrays list-comprehension higher-order-functions language-comparisons