هل PHP لديه ما يعادل بناء جملة الفهم قائمة بيثون؟
سؤال
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 قد يدعم قائمة الفهم - انظر إعلان القائمة البريدية:
- PHP-Dev] قائمة الفهم وتعبيرات المولد ل PHP (28 يونيو 2012)
وغيرها من المناقشة:
- ما المولدات التي يمكن أن تفعل لك (بواسطة IrCmaxell؛ 23 يوليو 2012) - لديه مثال فيبوناتشي.
- ما php 5.5 قد تبدو (بواسطة Nikic؛ 10 يوليو 2012)
- طلب تعليقات: مولدات (بدأ Wiki 05 يونيو 2012)
ليس خارج الصندوق، ولكن نلقي نظرة على:http://code.google.com/p/php-lc/ أو http://code.google.com/p/phparrayplus/
في .NET، أي ما يعادل بيثون "فهمات القائمة الحلوة النحوية" هي LINQ. وفي PHP، هناك العديد من موانئها، بما في ذلك yalinqo. مكتبة*. بناءيا، إنه أقرب إلى 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 بناء الجملة القصير للإغلاقات، ولكن يمكن استخدام مثل هذه "سلسلة Lambdas" لجعل الرمز أقصر.
هناك العديد من الطرق، بدءا من where
(if
ما يعادل) وينتهي مع groupJoin
الذي يؤدي الانضمام إلى التحول مع مجموعة.
* وضعت من قبل لي