Php 从数组键中删除字符

Php 从数组键中删除字符,php,arrays,json,Php,Arrays,Json,我正在创建一个Json对象,它有id,每个id都有一个后续位置。 在PHP中将这个对象作为数组处理时,我需要保持ID的生成顺序,但是Chrome会以数字升序重新排序ID 因此,作为一种解决方法,我在对象的id中添加了“id”,这样chrome就不会对其重新排序。 现在在php中我有了这个数组 Array ( [id102] => Array ( [pos] => 1 ) [id95] => Array

我正在创建一个Json对象,它有id,每个id都有一个后续位置。 在PHP中将这个对象作为数组处理时,我需要保持ID的生成顺序,但是Chrome会以数字升序重新排序ID

因此,作为一种解决方法,我在对象的id中添加了“id”,这样chrome就不会对其重新排序。 现在在php中我有了这个数组

Array
(
    [id102] => Array
        (
            [pos] => 1
        )

    [id95] => Array
        (
            [pos] => 2
        )

    [id101] => Array
        (
            [pos] => 3
        )

)
最终会进入数据库,但我需要从数组键中删除字符“id”

处理数组是为了确保位置(['pos'])是连续的(这就是为什么我需要确保它们是有序的)

但循环完成后,ltrim($key,“id”)或stru replace的任何变化都不会影响主数组。

$newArray=array();
$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);
foreach($key=>$val的值){ $newArray[ltrim($key,'id')]=$val; } uasort($newArray,function($a,$b){ 返回$a['pos']<$b['pos']?-1:1; }); 打印(新数组);
使用简单的

输出:

Array
(
    [102] => Array
        (
            [pos] => 1
        )

    [95] => Array
        (
            [pos] => 2
        )

    [101] => Array
        (
            [pos] => 3
        )

)
说明: 使用
array\u walk()
可以直接使用受其约束的原始数组的键和值(但我认为您不能修改它的键),因此我所做的是在调用
array\u walk()
之前添加一个临时数组
$new\u arr
。实际上,我们将把新修改的键和值传递给这个
$new\u arr
数组。因此,为了使用它,在函数中使用
use
关键字。另外,
&
用于直接修改
$new\u arr
。如果删除
&
,则不会对其进行任何更改


因此,基本上,原始数组
$arr
键被修改(
str_replace()
)并传递给
$new_arr
,值传递给
$new_arr

这很有效。为了让我了解这里正在发生的事情,您能否简单地解释一下数组的遍历和使用(&newValues)方面正在发生的事情?我发现得到一些有用的东西是一回事,而放弃它则是另一回事。如果没有,不用担心,谢谢你的帮助@Shamrockonov补充了一个解释,如果你仍然觉得很难问我,但是在这之前,请阅读
array\u walk()
的文档如果我理解正确,顶部的数组是运行底部代码的结果。显示传入数据的样子会很有用。
$new_arr = array();
array_walk($arr,function ($v,$k) use(&$new_arr) { $new_arr[str_replace('id','',$k)]=$v;});
print_r($new_arr);
Array
(
    [102] => Array
        (
            [pos] => 1
        )

    [95] => Array
        (
            [pos] => 2
        )

    [101] => Array
        (
            [pos] => 3
        )

)