문제

다음을 수행하고 싶습니다.

$normal_array       = array();
$array_of_arrayrefs = array( &$normal_array );

// Here I want to access the $normal_array reference **as a reference**,
// but that doesn't work obviously. How to do it?
end( $array_of_arrayrefs )["one"] = 1; // choking on this one

print $normal_array["one"]; // should output 1

문안 인사

/아르 자형

도움이 되었습니까?

해결책

end() 마지막 값의 참조를 반환하지 않고 마지막 값 자체를 반환합니다. 해결 방법은 다음과 같습니다.

$normal_array       = array();
$array_of_arrayrefs = array( &$normal_array );

$refArray = &end_byref( $array_of_arrayrefs );
$refArray["one"] = 1;

print $normal_array["one"]; // should output 1

function &end_byref( &$array ) {
    $lastKey = end(array_keys($array));
    end($array);
    return $array[$lastKey];
}

다른 팁

다음은 몇 가지 접근법이 있습니다. 그 중 어느 것도 특히 만족스럽지 않습니다. 더 나은 방법이 있다고 확신합니다 ..

<?php
$normal_array       = array();
$array_of_arrayrefs = array( "blah", &$normal_array );

foreach ($array_of_arrayrefs as &$v);
$v["one"] = 1;

echo $normal_array["one"];  //prints 1
?>


<?php
$normal_array       = array();
$array_of_arrayrefs = array( "blah", &$normal_array );

$lastIndex = @end(array_keys($array_of_arrayrefs)); //raises E_STRICT because end() expects referable.
$array_of_arrayrefs[$lastIndex]["one"] = 1;

echo $normal_array["one"];  //prints 1
?>

아마도 처음에는 참조로 통과해서는 안됩니다. 상태가 어디에서 수정되는지보기가 어렵 기 때문에 일반적으로 나쁜 관행으로 간주됩니다.

참고 문헌이 더 빠르다는 것은 매우 일반적인 오해입니다. 이것은 사실이 아닙니다 - 사실, 그들은 약간 느리게하지만, 실제로는 중요하지 않습니다. PHP에는 Copy-on-Write라는 시스템이 있으며, 이는 변수가 실제로 복사되지 않으며 작성하기 전에 변수가 실제로 복사되지 않음을 의미합니다.

참조가 필요한 유일한 곳은 PHP4에 있었고, 그곳에서 물체가 복제 될 것입니다. 이것은 PHP5에서 필요하지 않습니다.

function end ()는 값을 반환하지 않습니다. 또한 배열의 내부 포인터를 움직입니다. 그런 다음 key ()를 사용하여 색인을 얻을 수 있으며, 그 후 할당에 일반 배열 액세스를 사용할 수 있습니다.

$normal_array       = array();
$array_of_arrayrefs = array( &$normal_array );

end($array_of_arrayrefs);
$array_of_arrayrefs[ key($array_of_arrayrefs) ]["one"] = 1;

print $normal_array["one"];

라인 :

end ($ array_of_arrayrefs) [ "One"] = 1; // 이것에 질식합니다

구문 분석 오류를 던졌습니다.

구문 분석 오류 : 구문 오류, 예기치 않은 '[' 'in /file.php on 65

당신이 가지고 있는지 확인하십시오 error_reporting 그리고 display_error 활성화.

당신이 무엇을하고 싶은지 잘 모르겠지만 이것은 작동합니다.

$normal_array       = array();
$array_of_arrayrefs = array( &$normal_array );
// Here I want to access the $normal_array reference **as a reference**,
// but that doesn't work obviously. How to do it?
$array_of_arrayrefs[0]["one"] = 1;
//end($array_of_arrayrefs )["one"] = 1; // choking on this one
print $normal_array["one"]; // should output 1
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top