Question

Python a la liste syntaxiquement doux compréhensions:

S = [x**2 for x in range(10)]
print S;
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

En PHP je besoin de faire quelques looping:

$output = array();
$Nums = range(0,9);

foreach ($Nums as $num) 
{
    $out[] = $num*=$num;
}
print_r($out);

pour obtenir:

array (     [0] => 0     [1] => 1     [2] => 4     [3] => 9     [4] => 16     [5] => 25     [6] => 36     [7] => 49     [8] => 64     [9] => 81 )

Y at-il de toute façon à obtenir une syntaxe de compréhension de liste similaire en PHP? Y at-il de toute façon de le faire avec l'une des nouvelles fonctionnalités de PHP 5.3?

Merci!

Était-ce utile?

La solution

Peut-être quelque chose comme ça?

$out=array_map(function($x) {return $x*$x;}, range(0, 9))

Cela fonctionne en PHP 5.3+, dans une version plus ancienne que vous auriez à définir la fonction de rappel pour array_map séparément

function sq($x) {return $x*$x;}
$out=array_map('sq', range(0, 9));

Autres conseils

Dans .NET, l'équivalent de « liste syntaxiquement doux compréhensions » Python est LINQ. Et en PHP, il sont plusieurs ports de celui-ci, y compris la bibliothèque YaLinqo *. Syntaxiquement, il est plus proche de SQL plutôt que d'une séquence de constructions traditionnelles avec for et if, mais fonctionnellement, il est similaire:

$a = Enumerable::range(0, 10)->select('$v * $v');

Ceci produit un iterator qui peut être soit sortie à la console:

var_dump($a->toArray()); // by transforming the iterator to an array
echo $a->toString(', '); // or by imploding into a string

ou itéré en utilisant foreach:

foreach ($a as $i)
    echo $i, PHP_EOL;

Ici, '$v * $v' est un raccourci pour function ($v) { return $v * $v; } qui cette bibliothèque prend en charge. Malheureusement, PHP ne supporte pas la syntaxe courte pour les fermetures, mais ces « lambdas de chaîne » peut être utilisé pour rendre le code plus court.

Il sont beaucoup plus méthodes, en commençant par where (if équivalent) et se terminant par groupJoin qui effectue la transformation avec jonction groupement.

* développé par moi

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top