0
A
回答
2
簡而言之,iterator_to_array()
函數採用類型爲Traversable
的迭代器,並根據提供的參數將其轉換爲關聯/非關聯數組。從the documentation,
array iterator_to_array (Traversable $iterator [, bool $use_keys = true ])
該函數採用以下兩個參數,
第一個參數是
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);
最重要的一點這裏要注意的是,參數1傳遞給
iterator_to_array()
功能必須實現接口Traversable
,所以你不能直接傳遞任何其他類型的數組或對象到這個函數。請看下面的例子,$array = array('key1'=>'value1', 'value2', 'value3', 'value4'); $array = iterator_to_array($array, true); // wrong
第二個參數是一個布爾值,以指示是否使用迭代器元件的鍵作爲索引或沒有。見Example #1 here。因爲它們允許你一個
foreach
循環中使用的數據的自定義的順序
0
迭代器是有用的。讓我們藉此從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;
}
不像陣列,但是,如果不先迭代它,則無法訪問單個元素。嘗試這樣做會給你一個致命的錯誤:
/*
* 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()
投迭代器作爲一個數組,然後訪問該元素沒有額外的步驟:
$array = iterator_to_array($it);
// "secondelement"
echo $array[1];
如果您事先知道需要訪問迭代器中的單個元素,則應該考慮使用ArrayIterator代替。
相關問題
- 1. 什麼是PHP中的遞歸函數?
- 2. iterator_to_array
- 3. php的函數session_module_name是幹什麼的?
- 4. 什麼是PHP函數is_int()的用法?
- 5. 什麼是PHP的mysql()函數?
- 6. 什麼是PHP函數的PARAM
- 7. php函數「超載」是做什麼的?
- 8. 什麼是PHP的each()函數有用?
- 9. 什麼是CRC函數在PHP
- 10. 什麼是PHP嵌套函數?
- 11. 什麼是PHP函數創建輸出?
- 12. 什麼是session_register php函數用於?
- 13. 什麼是函數'sv'在PHP?
- 14. 什麼是PHP函數重載?
- 15. 什麼是函數重定向()在PHP
- 16. 數組中的PHP匿名函數,語法是什麼?
- 17. iterator_to_array太慢
- 18. PHP中變量定義中的減號函數是什麼?
- 19. 函數的__proto__是什麼?
- 20. PHP filter()函數 - 爲什麼?
- 21. PHP函數@ $ _做什麼?
- 22. 什麼是我的PHP函數中的錯誤?
- 23. C#中PHP的number_format的等價函數是什麼?
- 24. 什麼是抽象類中的構造函數的使用php
- 25. php中的變量綁定函數的好處是什麼5.3
- 26. PHP中的函數GLOBAL的範圍是什麼?
- 27. PHP:可以iterator_to_array()拋出一個MongoCursor
- 28. 函數參數是什麼?
- 29. PHP中函數metaphone()和soundex()的實際用法是什麼?
- 30. php中array_unique函數的後面是什麼?
閱讀更多:http://php.net/manual/en/function.iterator-to-array.php – Dave
感謝評論..我沒有得到完全通過手冊,所以我問這裏? –
當你有迭代器(實現接口迭代器的對象http://php.net/manual/en/class.iterator.php)時,你可以通過函數「iterator_to_array」獲得返回「當前」方法的元素數組,如果你使用參數「$ use_keys」方法鍵的結果將被用作返回數組的鍵。 –