문제

파이썬은 구문 적으로 달콤한 목록 이해력을 가지고 있습니다.

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에서, Python의 "Syntactically Sweet List Pholiension"과 동등한 것은 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는 폐쇄에 대한 짧은 구문을 지원하지 않지만 이러한 "String Lambdas"는 코드를 짧게 만드는 데 사용될 수 있습니다.

시작하여 더 많은 방법이 있습니다 where (if 동등한) 및 끝 groupJoin 그룹화와 결합 된 변환을 수행합니다.

* 나에 의해 개발되었습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top