N'PHP un équivalent en Python de la liste de compréhension de la syntaxe?
Python est syntaxiquement doux interprétations de la liste:
S = [x**2 for x in range(10)]
print S;
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
En PHP j'aurais besoin de faire certains boucle:
$output = array();
$Nums = range(0,9);
foreach ($Nums as $num)
{
$out[] = $num*=$num;
}
print_r($out);
pour obtenir:
Tableau
(
[0] => 0
[1] => 1
[2] => 4
[3] => 9
[4] => 16
[5] => 25
[6] => 36
[7] => 49
[8] => 64
[9] => 81
)
Est-il de toute façon à obtenir une liste similaire de compréhension de la syntaxe de PHP? Est-il de toute façon à le faire avec l'une des nouvelles fonctionnalités de PHP 5.3?
Merci!
- Je dirais même meilleur exemple de la façon impressionnante python interprétations de la liste sont les conditions! x = [x*2 for x in range(1,9) si x < 3] ou quel que soit le Pari qui ne peut être fait avec de la matrice de la carte!
- Voir aussi: passer des variables en fonction anonyme stackoverflow.com/questions/11420520/...
InformationsquelleAutor Darren Newton | 2009-08-12
Vous devez vous connecter pour publier un commentaire.
Peut-être quelque chose comme ça?
Cela fonctionne en PHP 5.3+, dans une version plus ancienne, vous devez définir la fonction de rappel pour l' array_map séparément
array_map("new MyClass", range(0,9))
?map
fonction de trop.) Simap
et la compréhension de liste sont similaires.PHP 5.5 peut soutenir les interprétations de la liste - voir la liste de diffusion de l'annonce:
Et la poursuite de la discussion:
pas hors de la boîte, mais jetez un oeil à:
http://code.google.com/p/php-lc/ ou http://code.google.com/p/phparrayplus/
Dans .NET, soit l'équivalent de Python "du point de vue syntaxique doux interprétations de la liste" est LINQ. Et en PHP, il y en a plusieurs ports, y compris les YaLinqo bibliothèque*. Du point de vue syntaxique, il est plus proche de SQL plutôt qu'une séquence de constructions traditionnelles avec
for
etif
, mais fonctionnellement, c'est la même chose:Ce qui produit un itérateur qui peut être soit sortie de la console:
ou itéré à l'aide de
foreach
:Ici,
'$v * $v'
est un raccourci pourfunction ($v) { return $v * $v; }
qui cette bibliothèque prend en charge. Malheureusement, PHP ne supporte pas la syntaxe courte pour des fermetures, mais aussi de "chaîne lambda" peut être utilisé pour rendre le code plus court.Il ya beaucoup plus de méthodes, en commençant par
where
(if
équivalent) et se terminant avecgroupJoin
qui effectue de rejoindre la transformation avec le groupement de.* développé par moi