从数组键中删除char

时间:2014-04-25 12:02:46

标签: php arrays json

我正在创建一个有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的任何变体都不会影响主数组。

2 个答案:

答案 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);

Demonstration

<强> 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);