tuplas - ¿PHP tiene un equivalente a la sintaxis de comprensión de la lista de Python?
llenar una lista en python (4)
En .NET, el equivalente de las "comprensiones de listas sintácticamente dulces" de Python es LINQ. Y en PHP, hay varios puertos, incluida la biblioteca YaLinqo *. Sintácticamente, está más cerca de SQL que de una secuencia de construcciones tradicionales con for
y if
, pero funcionalmente es similar:
$a = Enumerable::range(0, 10)->select(''$v * $v'');
Esto produce un iterador que puede enviarse a la consola:
var_dump($a->toArray()); // by transforming the iterator to an array
echo $a->toString('', ''); // or by imploding into a string
o iterado sobre el uso de foreach
:
foreach ($a as $i)
echo $i, PHP_EOL;
Aquí, ''$v * $v''
es un atajo para la function ($v) { return $v * $v; }
function ($v) { return $v * $v; }
que esta biblioteca admite. Desafortunadamente, PHP no admite la sintaxis corta para cierres, pero tales "lambdas de cadena" se pueden usar para acortar el código.
Hay muchos más métodos, comenzando con where
( if
equivalente) y terminando con groupJoin
que realiza la unión de la transformación con la agrupación.
* desarrollado por mí
Python tiene comprensión de lista sintácticamente dulce:
S = [x**2 for x in range(10)]
print S;
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
En PHP, necesitaría hacer algunos bucles:
$output = array();
$Nums = range(0,9);
foreach ($Nums as $num)
{
$out[] = $num*=$num;
}
print_r($out);
Llegar:
Matriz ([0] => 0 [1] => 1 [2] => 4 [3] => 9 [4] => 16 [5] => 25 [6] => 36 [7] => 49 [8] => 64 [9] => 81)
¿Hay alguna forma de obtener una lista similar de sintaxis de comprensión en PHP? ¿Hay alguna forma de hacerlo con alguna de las nuevas características en PHP 5.3?
¡Gracias!
PHP 5.5 puede ser compatible con la lista de comprensiones; consulte el anuncio de la lista de correo:
- [PHP-DEV] Comprensión de listas y expresiones generadoras para PHP (28 de junio de 2012)
Y más discusión:
- Lo que los generadores pueden hacer por usted (por ircmaxell; 23 de julio de 2012) - tiene un ejemplo de Fibonacci.
- Cómo se vería PHP 5.5 (por NikiC; 10 de julio de 2012)
- Solicitud de comentarios: Generadores (Wiki comenzó el 05 de junio de 2012)
Tal vez algo como esto?
$out=array_map(function($x) {return $x*$x;}, range(0, 9))
Esto funcionará en PHP 5.3+, en una versión anterior deberías definir la devolución de llamada para array_map por separado
function sq($x) {return $x*$x;}
$out=array_map(''sq'', range(0, 9));
no de fábrica, pero échele un vistazo a: http://code.google.com/p/php-lc/ o http://code.google.com/p/phparrayplus/