2
그래서 배열에서 접기를 수행하기 위해 다소 복잡한 "기능적"PHP 코드를 작성했습니다. 걱정하지 마세요, 어디서나 사용하지 않겠습니다. 문제는 PHP의 'each'함수는 정적으로 선언 된 배열의 끝 부분까지만 보이는 것입니다 (실제로는 하단 참조).PHP와 정적 배열 선언
// declare some arrays to fold with
$six = array("_1_","_2_","_3_","_4_","_5_","_6_");
// note: $ns = range(0,100) won't work at all--lazy evaluation?
$ns = array(1,2,3,4,5,6,7,8);
$ns[8] = 9; // this item is included
// add ten more elements to $ns. each can't find these
for($i=0; $i<10; ++$i)
$ns[] = $i;
// create a copy to see if it fixes 'each' problem
$ms = $ns;
$ms[0] = 3; // Just making sure it's actually a copy
$f = function($a, $b) { return $a . $b; };
$pls = function($a, $b) { return $a + $b; };
function fold_tr(&$a, $f)
{
$g = function ($accum, &$a, $f) use (&$g)
{
list($dummy,$n) = each($a);
if($n)
{
return $g($f($accum,$n),$a,$f);
}
else
{
return $accum;
}
};
reset($a);
return $g(NULL, $a, $f);
}
echo "<p>".fold_tr($six, $f )."</p>"; // as expected: _1__2__3__4__5__6_
echo "<p>".fold_tr($ns, $pls)."</p>"; // 45 = sum(1..9)
echo "<p>".fold_tr($ms, $pls)."</p>"; // 47 = 3 + sum(2..9)
솔직히 말해서 각 상태가 어떻게 유지되는지 전혀 모른다. 목록을 반복하는 언어에서 더 좋은 (비 마법적인) 메커니즘이 있기 때문에 기껏해야 흔적이있는 것 같지만 누구도 $a[$index] = value
을 사용하여 배열에 추가 된 항목을 등록하지만 '$ a [] = value`가 아닌 항목을 등록하는 이유를 알 수 있습니다. ? 이 문제에 대해 사전에 통찰 해 주셔서 감사합니다.
Doh! 나는 그것이 몇 시간 전에 깨달았 으면 좋겠다. 감사! –