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()));
}