像min()这样的php本机函数不支持固定数组

像min()这样的php本机函数不支持固定数组,php,arrays,spl,Php,Arrays,Spl,我想知道为什么像min($array)这样的原生php函数不支持Spl固定数组。好的gettype会说它是一个对象,但是它仍然包含数组数据 数组有很多有用的php函数,但为了使用它们,我必须使用一个额外的方法$fx\u array->toArray()。每当您决定使用固定阵列时,您必须考虑。。我是否需要使用toArray()?由于SplFixedArray实现了迭代器,因此很容易扩展类本身: class SplFixedArrayOnSteroids extends SplFixedArray

我想知道为什么像
min($array)
这样的原生php函数不支持
Spl固定数组
。好的
gettype
会说它是一个对象,但是它仍然包含数组数据


数组有很多有用的php函数,但为了使用它们,我必须使用一个额外的方法
$fx\u array->toArray()
。每当您决定使用固定阵列时,您必须考虑。。我是否需要使用
toArray()

由于
SplFixedArray
实现了
迭代器,因此很容易扩展类本身:

class SplFixedArrayOnSteroids extends SplFixedArray
{

  public function min(){

    $min = $this[0];

    foreach($this as $value)
    {

      if($value < $min)
        $min = $value;

    }

    return $min;

  }

}
类SplFixedArray扩展SplFixedArray
{
公共函数min(){
$min=$this[0];
foreach($value)
{
如果($value<$min)
$min=$value;
}
返回$min;
}
}

好的,我知道它的可移植性较差,但欢迎使用PHP。

因为
SplFixedArray
不是最终版本,因此您可以扩展它

为什么这是个问题?
min()。以
SplPriorityQueue
类为例,该类在迭代时删除项。有人可以很容易地扩展
SplFixedArray
并执行类似的操作。

它的实现可能不同,min函数接受数组而不是SplFixedArray(不同类型)。toArray()应该执行trickStrange示例。如果初始化静态数组,则必须传递大小。因此,在其上使用类似于
min()
的函数是没有意义的,因为您已经知道了大小。但是有一种方法。@galchen是的,我相信同样的事情,显然min()的级别很低,出于效率原因,它可能会做出一些假设,对于固定数组来说是不正确的。另一方面,幸运的是toArray()工作得很好。@feeela不,它与大小无关,与最小/最小元素有关。此外,不仅是最小函数,其余函数也是如此,最大、数组求和、内爆等,它们都会抱怨!对于没有方法提供数组的iTertor:
min(迭代器到数组($iterator,FALSE))
-从技术上讲,
$min
应该初始化为
+Inf
:)@Jack不需要
+Inf
,因为
$min=$this[0]很好,我可以说很聪明。@梅尔西,如果数组中没有元素呢?哈哈..”。。欢迎使用PHP,有时候这是真的。虽然有人可能不会以这种方式使用min,但示例it self很好地展示了我们可以扩展该类。我是唯一一个认为这不能回答问题的人吗?:)很高兴你提到了“意外行为”,这似乎有点主观,因为没有证据表明这确实是不支持Traversable或ArrayAccess的原因。对我来说,这似乎是合乎逻辑的,因为需要实现一个
count
方法才能使count工作。为什么其他功能会有任何不同?但是,是的,这只是我的观点:)