过滤、展平和重命名多维数组中的键(五月花/假日)

问题描述 投票:0回答:2

我正在 Laravel 7 中使用 Mayflower/Holidays 来获取我所在地区的假期列表。我得到的 Json 是:

{"2":{"type":"holiday","name":"My Holiday 1","weight":1,"date":"2020-05-01 00:00:00.000000","timezone_type":3,"timezone":"Europe\/Berlin"},"5":{"type":"holiday","name":"My Holiday 2","weight":1,"date":"2020-05-20 00:00:00.000000","timezone_type":3,"timezone":"Europe\/Berlin"}}

这是正确的,但我需要不同的表示。

[{"title":"My Holiday 1","start":"01.05.2020"},{"title":"My Holiday 2","start":"20.05.2020"}]

更轻,一维,按键

name
date
应该重命名为
title
start
。我试过 使用
foreach
array_map
的各种方法,但不断出错。使用 PHP 7 执行此操作的最佳方法是什么?

php arrays laravel php-7
2个回答
2
投票

既然你也标记了 Laravel,我可以向你展示 Laravel Collection each() 方法。

// your input
$jsonHolidays = '{"2":{"type":"holiday","name":"My Holiday 1","weight":1,"date":"2020-05-01 00:00:00.000000","timezone_type":3,"timezone":"Europe\/Berlin"},"5":{"type":"holiday","name":"My Holiday 2","weight":1,"date":"2020-05-20 00:00:00.000000","timezone_type":3,"timezone":"Europe\/Berlin"}}';

// convert json into array
$arrayHolidays = json_decode($jsonHolidays, true);

// Using laravel collection
$holidays = [];
collect($arrayHolidays)->each(function ($holiday) use (&$holidays) {
    $holidays[] = [
        'title' => $holiday['name'],
        'start' => \Carbon\Carbon::parse($holiday['date'])->format('d.m.Y')
    ];
});

// converting back to json
return json_encode($holidays, true);

0
投票

只需 解码 json 字符串 到关联数组:

$array = json_decode($jsonString, true);

您可以使用

array_map
foreach
并根据您的表示格式化数据。

最后一步是将数组转换回 json 字符串:

json_encode($jsonString);
© www.soinside.com 2019 - 2024. All rights reserved.