如何在不更改订单的情况下重命名对象属性?
示例对象:
$obj = new stdClass();
$obj->k1 = 'k1';
$obj->k2 = 'k2';
$obj->k3 = 'k3';
$obj->k4 = 'k4';
通过创建新属性重命名示例:
$obj->replace = $obj->k3;
unset($obj->k3);
结果:
( k1=>k1, k2=>k2, k4=>k4, replace=>k3 )
看到问题?
只需重新创建对象属性即可更改订单。
我对数组有类似的问题,并提出了这个解决方案:
为阵列实施解决方案
function replaceKey(&$array, $find, $replace)
{
if(array_key_exists($find, $array)){
$keys = array_keys($array);
$i = 0;
$index = false;
foreach($array as $k => $v){
if($find === $k){
$index = $i;
break;
}
$i++;
}
if ($index !== false) {
$keys[$i] = $replace;
$array = array_combine($keys, $array);
}
}
}
寻找类似于此的东西,但是可以处理对象的函数。
似乎无法找到有关对象属性位置索引的任何文档。
答案 0 :(得分:0)
由于您的数组有一个函数,为什么不执行以下操作:
$array = (array) $obj;
$replacedKeyArray = replaceKey($array);
$newObject = (object) $replacedKeyArray;
答案 1 :(得分:0)
所以,读取你的属性
$obj = new YourClass();
$backup = [];
foreach ($obj as $key => $value)
{
$backup[$key] = $value;
unset($obj->$key);
}
replaceKey($backup, $find, $replace);
foreach ($backup as $key => $value)
{
$obj->$key = $value;
}