PHP의 어레이 내부 배열 참조를 어떻게 사용할 수 있습니까?
-
08-07-2019 - |
문제
다음을 수행하고 싶습니다.
$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