[英]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] = '';
您可以將foreach
與filter_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.