首页 > 解决方案 > 将值从 json 键/值对重新分配给下一个键

问题描述

我得到了一个 json 文件,如下所示(显示几行中的一个,看起来相同):

 "description 1": {
  "year0": "49",
  "year1": "48",
  "year2": "876786",
  "year3": "1234"
},

使用 PHP,我需要将每个值向下移动,以便 year0 的值成为 year1 的值,依此类推(第 3 年的值将被删除,而 year0 将为空,如下所示:

 "description 1": {
  "year0": "",
  "year1": "49",
  "year2": "48",
  "year3": "876786"
},

有没有比遍历每个键值、将其保存到变量并将其分配给下一个键等更快的方法来处理数据?

标签: phparraysjson

解决方案


没有办法更快地做到这一点,但我认为有一种简单易读的方法,我认为最好的方法是收集方法mapWithKeys()。它允许您进行数组映射,但在此过程中更改键。在我看来这会更容易,而不是考虑将每个变量向下移动一个位置,只需将一年添加到键并记住将第一年添加到新数组中。

$years = collect(json_decode('json')->description_1);

$firstYear = null;

$years = $years->mapWithKeys(function ($value, $key) use (&$firstYear) {
    if (! $firstYear) {
        $firstYear = $key;
    }

    $year = intval(Str::after('year', $key)) + 1;

    return ['year' . $year => $value];
})->all();

$years[$firstYear] = '';

推荐阅读