PHP의 iterator_to_array
기능을 이해하는 데 어려움을 겪고 있습니다.PHP의 iterator_to_array 함수는 무엇입니까?
설명서를 읽으려고했으나 도움이되지 않았습니다.
어떻게 사용할 수 있습니까? 적절한 유스 케이스는 무엇입니까?
PHP의 iterator_to_array
기능을 이해하는 데 어려움을 겪고 있습니다.PHP의 iterator_to_array 함수는 무엇입니까?
설명서를 읽으려고했으나 도움이되지 않았습니다.
어떻게 사용할 수 있습니까? 적절한 유스 케이스는 무엇입니까?
간단히 말해서 iterator_to_array()
함수는 Traversable
유형의 반복자를 사용하고 제공된 인수에 따라 연관/비 연관 배열로 변환합니다. 이 기능은 다음의 두 가지 인자를
array iterator_to_array (Traversable $iterator [, bool $use_keys = true ])
,
첫번째 인수 the documentation에서 인터페이스 인 Traversal
형이다. IteratorAggregate
및 Iterator
클래스 모두이 인터페이스를 확장합니다. 이 같은 사용자 정의 클래스에서이 두 클래스를 구현할 수 있습니다
class myIterator implements IteratorAggregate {
private $array = array('key1'=>'value1', 'value2', 'value3', 'value4');
public function getIterator(){
return new ArrayIterator($this->array);
}
}
$obj = new myIterator;
$array = iterator_to_array($obj->getIterator(), true);
var_dump($array);
또는를
class myIterator implements Iterator {
private $key;
private $array = array('key1'=>'value1', 'value2', 'value3', 'value4');
public function __construct(){
$this->key = key($this->array);
}
public function rewind(){
reset($this->array);
$this->key = key($this->array);
}
public function current(){
return $this->array[$this->key];
}
public function key(){
return $this->key;
}
public function next(){
next($this->array);
$this->key = key($this->array);
}
public function valid(){
return isset($this->array[$this->key]);
}
}
$obj = new myIterator;
$array = iterator_to_array($obj, true);
var_dump($array);
여기에서 주목해야 할 가장 중요한 점은 인터페이스를 구현해야합니다 iterator_to_array()
함수에 전달하는 인수 1 Traversable
이므로이 유형의 배열이나 객체를이 함수에 직접 전달할 수는 없습니다. 인덱스 또는하지 반복자 요소 키를 사용할지 여부를 나타 내기 위해,
$array = array('key1'=>'value1', 'value2', 'value3', 'value4');
$array = iterator_to_array($array, true); // wrong
번째 인수는 부울 값이고, 다음의 예를 참조. Example #1 here을 참조하십시오. 그들은 당신이 foreach
루프 내에서 데이터의 사용자 정의 순서를 사용할 수 있기 때문에
반복자 유용합니다. the PHP manual에서 예 (약간 아래로 깎았)의이 보자 :
class myIterator implements Iterator {
private $position = 0;
private $array = array(
"firstelement",
"secondelement",
"lastelement",
);
public function __construct() {
$this->position = 0;
}
function rewind() {
$this->position = 0;
}
function current() {
return $this->array[$this->position];
}
function key() {
return $this->position;
}
function next() {
++$this->position;
}
function valid() {
return isset($this->array[$this->position]);
}
}
$it = new myIterator;
그것을 반복하기 위해, 우리는 단지 배열과 같은 foreach
루프를 사용할 수 있습니다
foreach($it as $ele){
echo $ele;
}
배열과는 달리
그러나, 먼저 반복하지 않고 단일 요소에 액세스 할 수 없습니다.
$array = iterator_to_array($it);
// "secondelement"
echo $array[1];
: /*
* Fatal error: Uncaught Error: Cannot use object of type myIterator as array
* in /home/hpierce/sandbox.php
*/
echo $it[1];
//Iterating to the second element.
$it->next();
// "secondelement"
echo $it->current();
당신은 추가 단계없이 요소에 액세스 한 후 배열로 반복자를 캐스팅 iterator_to_array()
을 사용할 수있는 하나의 요소에 액세스하려면 : 그렇게하려고하면 당신에게 치명적인 오류를 줄 것이다
반복기 내에서 단일 요소에 액세스해야한다는 것을 알고있는 경우 ArrayIterator을 대신 사용해야합니다.
자세히보기 : http://php.net/manual/en/function.iterator-to-array.php – Dave
의견을 보내 주셔서 감사합니다 ... i가 설명서를 통해 완전히받지 못해서 내가 여기 물었습니까? –
iterator (인터페이스 Iterator http://php.net/manual/en/class.iterator.php를 구현 한 객체)를 사용하면 "iterator_to_array"함수로 "current"메서드를 반환하는 요소의 배열을 얻을 수 있고 사용하면 매개 변수 "$ use_keys"이면 메소드 키의 결과가 반환 된 배열의 키로 사용됩니다. –