Python has syntactically sweet list comprehensions:
S = [x**2 for x in range(10)]
print S;
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
In PHP I would need to do some looping:
$output = array();
$Nums = range(0,9);
foreach ($Nums as $num)
{
$out[] = $num*=$num;
}
print_r($out);
to get:
Array ( [0] => 0 [1] => 1 [2] => 4 [3] => 9 [4] => 16 [5] => 25 [6] => 36 [7] => 49 [8] => 64 [9] => 81 )
Is there anyway to get a similar list comprehension syntax in PHP? Is there anyway to do it with any of the new features in PHP 5.3?
Thanks!
PHP 5.5 may support list comprehensions - see the mailing list announcement:
And further discussion:
Maybe something like this?
This will work in PHP 5.3+, in an older version you'd have to define the callback for array_map separately
not out of the box, but take a look at: http://code.google.com/p/php-lc/ or http://code.google.com/p/phparrayplus/
In .NET, the equivalent of Python's "syntactically sweet list comprehensions" is LINQ. And in PHP, there're several ports of it, including YaLinqo library*. Syntactically, it's closer to SQL rather than a sequence of traditional constructs with
for
andif
, but functionally, it's similar:This produces an iterator which can either be output to console:
or iterated over using
foreach
:Here,
'$v * $v'
is a shortcut forfunction ($v) { return $v * $v; }
which this library supports. Unfortunately, PHP doesn't support short syntax for closures, but such "string lambdas" can be used to make the code shorter.There're many more methods, starting with
where
(if
equivalent) and ending withgroupJoin
which performs joining transformation with grouping.* developed by me