php 将数组拆分为对象并添加说明

icnyk63a  于 2023-01-16  发布在  PHP
关注(0)|答案(2)|浏览(109)

我有阵心

[{"id":"331","file_name":"3b1379e2496408dd4c865f5f63f96bf6","file_path":"https://path/3b1379e2496408dd4c865f5f63f96bf6.png"},
{"id":"332","file_name":"d0ef559473a061086592bceed0880a01","file_path":"https://path/d0ef559473a061086592bceed0880a01.png"}]

我需要输出这个数组,使它最后看起来像这样

[{url:"https://path/3b1379e2496408dd4c865f5f63f96bf6.png"},
{url:"https://path/d0ef559473a061086592bceed0880a01.png"}]

要从数组中只输出一个字段,我使用

array_column($array, 'file_path')

最后我得到了

["https://path/3b1379e2496408dd4c865f5f63f96bf6.png",
"https://path/d0ef559473a061086592bceed0880a01.png"]

但是现在如何使这些字段成为对象并在它们前面添加一个url呢?

nom7f22z

nom7f22z1#

可以使用Map操作:

array_map(
    fn($value) => (object) ['url' => $value],
    array_column($array, 'file_path')
)

https://3v4l.org/vbguH
对于7.3及更低版本(无箭头功能支持):

array_map(
    function($value) {
        return (object) ['url' => $value];
    },
    array_column($array, 'file_path')
)

注意,除非您需要PHP($foo->url)中的对象语法或特性,否则可以省略(object)转换;它仍然使用对象语法进行JSON编码,除非您告诉它不要这样做。

jrcvhitl

jrcvhitl2#

下面是一个非常基本的版本--简单地遍历数组,然后创建一个新的数组,每个条目中只包含您想要的属性:

$json = '[{"id":"331","file_name":"3b1379e2496408dd4c865f5f63f96bf6","file_path":"https://path/3b1379e2496408dd4c865f5f63f96bf6.png"},
{"id":"332","file_name":"d0ef559473a061086592bceed0880a01","file_path":"https://path/d0ef559473a061086592bceed0880a01.png"}]';

$arr = json_decode($json, true);
$output = [];

foreach ($arr as $item)
{
    $output[] = ["url" => $item["file_path"]];
}

echo json_encode($output);

演示:https://3v4l.org/JcKZE
或者,对于简单的一行程序,可以使用array_map函数:
在上面的代码中,将$output = [];foreach循环替换为:

$output = array_map(fn($value) => (object) ['url' => $value], array_column($arr, 'file_path'));

演示:https://3v4l.org/a10kB

相关问题