سؤال

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، أي ما يعادل بيثون "فهمات القائمة الحلوة النحوية" هي 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 الذي يؤدي الانضمام إلى التحول مع مجموعة.

* وضعت من قبل لي

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top