簡體   English   中英

將值從json鍵/值對重新分配給下一個鍵

[英]Reassign value from json key/value pair to next key

我得到了一個如下所示的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"
},

有沒有比遍歷每個鍵值,將其保存到變量並將其分配給下一個鍵等更快的數據處理方法了?

沒有方法可以更快地執行此操作,但是我認為有一種簡單易讀的方法,我認為最好的方法是收集方法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] = '';

您可以將foreachfilter_var

$a = json_decode($json, true);
$r = [];
foreach($a['description 1'] as $k => $v){
    $index = (int) filter_var($k, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
    $r[$k] = ($index == 0) ? '' : $a['description 1']['year'.--$index];
}

實時示例: -https : //3v4l.org/AtoZs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM