array_values()
은 ArrayAccess 개체에서 작동하지 않습니다. 도 않습니다 array_keys()
ArrayAccess 개체와 함께 array_values가 작동하지 않습니다.
왜? 내가 $object['key']
에 액세스 할 수 있는지
나는
array_values()
은 ArrayAccess 개체에서 작동하지 않습니다. 도 않습니다 array_keys()
ArrayAccess 개체와 함께 array_values가 작동하지 않습니다.
왜? 내가 $object['key']
에 액세스 할 수 있는지
나는
아니, 당신은 ArrayAccess의 유틸리티를 오해 한 배열 작업의 모든 종류의 일을 할 수 있어야합니다. 배열을위한 일종의 래퍼가 아닙니다. 예, 구현을위한 표준 예는 기능이 클래스에 의해 래핑 된 개인 $array
변수를 사용하지만 특히 유용하지는 않습니다. 종종 배열을 사용할 수도 있습니다.
ArrayAccess의 한 가지 좋은 예는 스크립트가 사용 가능한 변수를 알 수없는 경우입니다.
매우 어리석은 예로 원격 서버에서 작동하는 개체를 상상해보십시오. 해당 서버의 리소스는 네트워크에서 API를 사용하여 읽고, 업데이트하고 삭제할 수 있습니다. 프로그래머는 배열과 유사한 구문으로 해당 기능을 래핑하려고한다고 결정하므로 $foo['bar'] = 'foobar'
은 해당 서버의 bar
리소스를 foobar
으로 설정하고 echo $foo['bar']
을 검색합니다. 스크립트는 모든 가능한 값을 시도하지 않고 어떤 키 또는 값이 있는지 알아낼 방법이 없습니다.
그래서 ArrayAccess는 배열 구문을 사용하여 개체를 설정, 업데이트, 검색 또는 삭제할 때 배열 구문을 사용할 수 있습니다.
다른 인터페이스 Countable
은 count()
을 사용할 수 있습니다. 동일한 클래스에서 두 인터페이스를 모두 사용할 수 있습니다. 이상적으로는 array_values
또는 array_keys
을 수행 할 수있는 인터페이스를 포함하여 더 많은 인터페이스가있을 수 있지만 현재 존재하지 않습니다.
ArrayAccess
은 매우 제한되어 있습니다. 기본 array_
기능의 사용을 허용하지 않습니다 (기존 인터페이스는 없음).
개체에 대해 더 많은 배열과 같은 작업을 수행해야하는 경우 본질적으로 컬렉션을 만듭니다. 콜렉션은 메소드에 의해 조작되어야합니다.
따라서 개체를 만들고 ArrayObject을 확장하십시오. 이것은 IteratorAggregate
, Traversable
, ArrayAccess
, Serializable
및 Countable
을 구현합니다. 당신은 키가 필요한 경우
, 단순히 array_keys
방법 추가 : 다음
public function array_keys($search_value = null, $strict = false)
{
return call_user_func_array('array_keys', array($this->getArrayCopy(), $search_value, $strict));
}
을 할 수 있습니다 다음 ArrayObject
/ArrayAccess
객체가 배열로 작업 할 수 있습니다,하지만 그들은 아직도
foreach ($object->array_keys() as $key) {
echo $object[$key];
}
사물.
var_dump(array_keys(get_object_vars($ArrObj)));
또는 (array) $ArrObj
, 예를 들어,에 의해 배열로 캐스팅하여 ArrayObject 변환 : 그래서 대신 (배열에서만 작동) array_keys()
의 당신은 예를 들어, get_object_vars()
를 사용한다:
var_dump(array_keys((array)$ArrObj));
예제를 보여주십시오. – powtac
array_keys ($ arrayaccessobject); ? – thelolcat
array_key_exists()도 작동하지 않는다는 내용의 http://www.php.net/manual/en/class.arrayaccess.php#104061 주석이 있습니다. – powtac