나는 다차원 배열로 표현 된 데이터가 있습니다. 이 데이터를 내 OO 애플리케이션에 임베드하고 이러한 데이터에 추가 기능을 제공 할뿐만 아니라 전통적인 무작위 액세스와 반복기를 사용하여 액세스하는 방법 (foreach를 사용할 수 있도록)을 원합니다. 즉 다차원 배열에 대한 래핑 클래스를 구현하고 싶습니다.PHP - 다차원 배열 래퍼 클래스
이미 시도한 것들 :
I.에게 ArrayAccess 를이 하나의 문제는 이와 같이 I 참조로 반환 할 수 있으며, 서버가 PHP 5.2.17 사용하고 &offsetGet()
오류를 제공한다는 것이다, 의미 나는 다차원 요소 액세스를 구현할 수없는 옵션 현재
$obj[$key1][$key2] = $value;
주, 최신 PHP 버전이 업그레이드되어
II. 마법 방법 사용하기 이것은 약간 까다 롭지 만 변수를 키로 사용하려고하면 문제가 발생합니다. 예 :
$obj->$key1[$key2] = $value;
인터프리터는 먼저 $key1[$key2]
는 통지를 던지고 $ 키 1의 첫 번째 문자를 반환 평가하고, 사용하는 내 배열 키로. 이 문제를 어떻게 해결할 지 모르겠습니다. 나는 작업 우선 순위를 강제로 대괄호를 사용하여 생각했지만 내 다음 시도에서와 같은 문제가 있었다 :
III. 간단한 get 및 set 함수 사용하기 이전 PHP. 그것은 쓸려고 할 때 울기도합니다 :
$obj->get($key1)[$key2] = $value;
둥근 괄호로 끝나는 식의 색인 방법을 알지 못하기 때문에 울부 짖습니다.
잃어버린 리조트 옵션이 있습니다. 배열을 공개하고 모든 것을 잊어 버려라. 그러나 거기에 가기 전에는 실제로이 일을하는 다른 방법이 없다는 것을 확신하고 싶습니다.
내 첫번째 생각은 모양과 추가 배열과 같은 기능을 가진 배열과 같이 동작하는 객체를 구현하는 것이 었습니다. 그러나 PHP 5.2.17에서 배열처럼 보이는 것을 구현할 수 없다는 것이 밝혀졌습니다. 그래서 나는 적어도 "비슷한 모양과 약간의"부분으로 머물려고 노력했다. 하지만 실제로 그렇게 할 수는 없습니다. 답해 주셔서 감사합니다. 가장 직접적 인'$ obj-> arrayprop [$ key1] [$ key2]'방법을 사용합니다. 정말 못 생겼지 만, 뭐든간에. 나는 이미 너무 많은 PHP를 싫어한다. – SinistraD
그것은 정신 (나는 실제로 그렇게 동의한다)이다. :) 그러나 어쩌면 당신의 마음을 바꾸기 위해, 나는'V. 중첩 된 객체 사용하기 .' – GolezTrol
이 중첩 된 객체는 실제로 잘 작동합니다. 당신이 묘사 한 것뿐만 아니라 일반적인 방법으로도 말입니다. 중첩 된 객체를 사용하면 I에서 참조로 전달하는 문제를 해결할 수 있으므로 ArrayAccess를 다시 사용할 수 있습니다. 답변으로 내 코드를 게시합니다. 올바른 방향으로 안내해 주셔서 감사합니다. 모든 것을 일반적인 방식으로 중단하십시오. 내 코드를 버리고 다시 생각해 보도록하겠습니다. 장래에 사용할 수있는 가능한 모든 방법에 대한 문제에 조금 더 집중하십시오. – SinistraD