PHP는 Python의 목록 이해력 구문과 동일합니까?
문제
파이썬은 구문 적으로 달콤한 목록 이해력을 가지고 있습니다.
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는 목록 이해력을 지원할 수 있습니다 - 메일 링리스트 발표를 참조하십시오.
- PHP-DEV] PHP에 대한 이해력 및 발전기 표현 목록 (2012 년 6 월 28 일)
그리고 추가 토론 :
- 발전기가 당신을 위해 할 수있는 일 (Ircmaxell; 2012 년 7 월 23 일) - Fibonacci 예제가 있습니다.
- PHP 5.5의 모습 (Nikic, 2012 년 7 월 10 일)
- 의견 요청 : 생성기 (Wiki는 2012 년 6 월 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
그룹화와 결합 된 변환을 수행합니다.
* 나에 의해 개발되었습니다