我想知道爲什麼像min($array)
天然PHP函數不支持Spl Fixed Arrays
。好吧gettype
會說它是一個對象,但它仍然包含數組數據。PHP本地函數()不支持固定陣列
有數組這麼多有用的PHP函數,但爲了使用它們我必須使用一個額外的方法$fx_array->toArray()
。無論何時您決定使用固定陣列,您都必須考慮......我是否需要使用toArray()
?
我想知道爲什麼像min($array)
天然PHP函數不支持Spl Fixed Arrays
。好吧gettype
會說它是一個對象,但它仍然包含數組數據。PHP本地函數()不支持固定陣列
有數組這麼多有用的PHP函數,但爲了使用它們我必須使用一個額外的方法$fx_array->toArray()
。無論何時您決定使用固定陣列,您都必須考慮......我是否需要使用toArray()
?
由於SplFixedArray
工具Iterator
,很容易擴展類本身:
class SplFixedArrayOnSteroids extends SplFixedArray
{
public function min(){
$min = $this[0];
foreach($this as $value)
{
if($value < $min)
$min = $value;
}
return $min;
}
}
好吧,我知道這將是更小的便攜式和所有,但歡迎PHP。
技術上'$ min'應該初始化爲'+ Inf文件':) – 2013-05-14 12:35:47
@Jack不需要'+ Inf',因爲'$ min = $ this [0];'很好,我可以說很聰明。 – Melsi 2013-05-14 12:44:02
@Melsi如果數組中沒有元素會怎麼樣? – 2013-05-14 12:48:07
因爲SplFixedArray
不是終點,因此,你可以擴展它。
爲什麼是一個問題? min()
需要迭代它,雖然它可能會觸發意外的行爲。以SplPriorityQueue
類爲例,它會在迭代時刪除項目。有人可以很容易地擴展SplFixedArray
並做類似的事情。
尼斯你提到的「異常行爲」 – Melsi 2013-05-14 12:54:45
這似乎有點主觀,因爲這並沒有證明這確實是不支持Traversable或ArrayAccess的原因。 – 2013-05-14 12:59:20
嗯,這對我來說似乎合乎邏輯,因爲你需要實現一個count方法才能使count有效。爲什麼其他功能應該有什麼不同?但是,這只是我的意見:) – 2013-05-14 13:13:52
它可能以不同的方式實現,min函數接受數組而不是SplFixedArray(不同類型)。 toArray()應該訣竅 – galchen 2013-05-14 12:29:54
奇怪的例子。如果你初始化一個靜態數組,你必須通過這個大小。因此,使用像'min()'這樣的函數是沒有意義的,因爲你已經知道了大小。但有一個方法['SplFixedArray :: getSize'](http://php.net/splfixedarray.getsize.php)。 – feeela 2013-05-14 12:31:44
@galchen是的,我相信同樣的事情,顯然min()是相當低的水平,並且出於效率的原因,它可能會做出一些假設,對於固定數組是不正確的。另一方面,幸好toArray()完美地工作。 – Melsi 2013-05-14 12:33:20