我正在创建一个有id的Json对象,每个id都有一个后续位置。 在PHP中将此对象作为数组处理时,我需要按照它们的生成顺序保存ID,但Chrome会以数字升序重新排列ID。
因此,作为一项工作,我已经添加了" id"对象中的ID,因此chrome不会重新排序。 现在在PHP我有这个数组
Array
(
[id102] => Array
(
[pos] => 1
)
[id95] => Array
(
[pos] => 2
)
[id101] => Array
(
[pos] => 3
)
)
最终将进入数据库,但我需要删除char" id"从数组键。
处理数组以确保位置([' pos'])是连续的(这就是我需要确保它们按顺序排列的原因)
$seqKey = key($values);
$seq = $values[$seqKey]['pos'];
foreach($values as $key=>$val){
if($seq != $val['pos']){
$values[$key]['pos'] = $seq;
}
$seq++;
}
但是一旦完成循环,ltrim($ key," id")或str_replace的任何变体都不会影响主数组。
答案 0 :(得分:1)
使用简单的array_walk()
$new_arr = array();
array_walk($arr,function ($v,$k) use(&$new_arr) { $new_arr[str_replace('id','',$k)]=$v;});
print_r($new_arr);
<强> OUTPUT :
强>
Array
(
[102] => Array
(
[pos] => 1
)
[95] => Array
(
[pos] => 2
)
[101] => Array
(
[pos] => 3
)
)
使用array_walk()
,您可以直接使用受其影响的原始数组的键和值(但我不认为您可以修改它的键),所以我做的是在调用$new_arr
之前添加了一个临时数组array_walk()
。实际上,我们将把新修改的键和值传递给此$new_arr
数组。因此,为了使用它,您可以在函数内部使用use
关键字。 &
也用于直接修改$new_arr
。如果您删除&
,则不会对其进行任何更改。
基本上,原始数组$arr
键被修改(str_replace()
)并传递给$new_arr
,值传递给$new_arr
。
答案 1 :(得分:0)
$newArray = array();
foreach ($values as $key => $val) {
$newArray[ltrim($key, 'id')] = $val;
}
uasort($newArray, function($a, $b){
return $a['pos'] < $b['pos'] ? -1 : 1;
});
print_r($newArray);