Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP如何在arrayObject上数组_unshift_Php_Spl_Arrayobject - Fatal编程技术网

PHP如何在arrayObject上数组_unshift

PHP如何在arrayObject上数组_unshift,php,spl,arrayobject,Php,Spl,Arrayobject,如标题中所述,如何在arrayObject上执行ArrayUnshift(),ArrayPush()是通过执行arrayObject->append()来获得的,但如何取消移位呢 编辑:我忘了提到的是,在这种特殊情况下,我还需要保留现有密钥。没有任何功能可以直接完成此操作。您还有其他几种选择: 手动将每个元素移动1,并将新值设置为索引0(仅当您有数字索引ArrayObject时) 编写一个派生自ArrayObject的类,并添加一个函数prepend(实现可能如下) 提取一个数组,调用ar

如标题中所述,如何在
arrayObject
上执行
ArrayUnshift()
ArrayPush()
是通过执行
arrayObject->append()
来获得的,但如何取消移位呢

编辑:我忘了提到的是,在这种特殊情况下,我还需要保留现有密钥。

没有任何功能可以直接完成此操作。您还有其他几种选择:

  • 手动将每个元素移动1,并将新值设置为索引0(仅当您有数字索引ArrayObject时)
  • 编写一个派生自
    ArrayObject
    的类,并添加一个函数
    prepend
    (实现可能如下)
  • 提取一个数组,调用
    array\u unshift()
    并使用修改后的数组创建一个新的
    ArrayObject

ArrayObject中没有这样的功能,但您可以将其子类化,以添加所需的任何内容。试试这个:

class ExtendedArrayObject extends ArrayObject {
    public function prepend($value) {
        $array = (array)$this;
        array_unshift($array, $value);
        $this->exchangeArray($array);
    }
}

@Dmitry,@soulmerge您对初始问题的回答很好,但在我的编辑中没有达到要求,但它们为我指明了实现预期目标的正确方向这是我们在工作中提供的解决方案:(适用于php>=5.1)

这些示例与我们的特定arrayObject所需的最终解决方案并不完全相同。我们使用数组值中给定的键作为值的键(考虑使用数据库rowId作为集合中每个值的索引)。让我们将该值称为“key”,实际数组结构是这样的:

array(
  key1 => array(key=>key1,val1=>val1,val2=>val2...),
  key2 => array(key=>key2,val1=>val1_2,val2=>val2_2...),
  ...
);
因此,我们的解决方案看起来更像这样:

public function unshift($value){
  $tmp = $this->getArrayCopy();
  $tmp = array($value['key'],$value) + $tmp;
  $this->exchangeArray($tmp);
  return $this;
}

感谢您的回答,如果您也找到了一种在php5.0中工作的方法,我仍然感兴趣。

真的吗?php5.0???它已经失去支持八年了。除了错过了所有的新功能外,它还有许多已知的bug和一些无法修补的严重安全问题。如果您仍在使用5.0,这意味着您的服务器管理员正在危险地疏忽。(这同样适用于5.1,我甚至可以说适用于5.2)
function prefix($value) {
    return $this->exchangeArray(array_merge([$value], $this->getArrayCopy()));
}
array(
  key1 => array(key=>key1,val1=>val1,val2=>val2...),
  key2 => array(key=>key2,val1=>val1_2,val2=>val2_2...),
  ...
);
public function unshift($value){
  $tmp = $this->getArrayCopy();
  $tmp = array($value['key'],$value) + $tmp;
  $this->exchangeArray($tmp);
  return $this;
}
function prefix($value) {
    return $this->exchangeArray(array_merge([$value], $this->getArrayCopy()));
}