首页 > 解决方案 > PHP将自定义数组转换为特定对象结构

问题描述

我有一组数据需要转换为特定的结构,以便由 3rd 方插件正确加载。

我能够实现的当前最接近的数组在下面,从这里我被卡住了。

php数组

 [
        [
            ["item1"],
            ["itemname"],
            ["item desc"],
            ["05\/14\/2014"]
        ],
        [
            ["item12"],
            ["itemname2"],
            ["item desc2"],
            ["05\/14\/2014"]
        ]
    ]

json_encoded

[ 
 0 => [0 => "Value1", 1 => "Value2", 2 => "Value3" ], 
 1 => [0 => "Test", 1 => "Test2", 2 => "Test3" ], 
 2 => [0 => "Random1", 1 => "Random2", 2 => "Random3" ]
]

我如何将它转换成这样的结构,

[
  {"0":"Value1","1":"Value2", "2":"Value3"},
  {"0":"Test", "1":"Test2","2":"Test3"},
  {"0":"Random1","1":"Random2","2":"Random3"},
]

任何想法将不胜感激,非常感谢!

标签: phpjson

解决方案


您可以通过将所有数组元素转换为之前的对象来创建表示对象数组的 JSON 字符串json_encode。但是,这将给出字符串键,而不是数字键(不是有效的 JSON):

$array = [ 
 0 => [0 => "Value1", 1 => "Value2", 2 => "Value3" ], 
 1 => [0 => "Test", 1 => "Test2", 2 => "Test3" ], 
 2 => [0 => "Random1", 1 => "Random2", 2 => "Random3" ]
];

foreach ($array as &$arr) {
    $arr = (object)$arr;
}
echo json_encode($array, JSON_PRETTY_PRINT);

输出:

[
    {
        "0": "Value1",
        "1": "Value2",
        "2": "Value3"
    },
    {
        "0": "Test",
        "1": "Test2",
        "2": "Test3"
    },
    {
        "0": "Random1",
        "1": "Random2",
        "2": "Random3"
    }
]

3v4l.org 上的演示

更新

根据对问题的编辑,您似乎正在寻找这个:

$array = [
        [
            ["item1"],
            ["itemname"],
            ["item desc"],
            ["05/14/2014"]
        ],
        [
            ["item12"],
            ["itemname2"],
            ["item desc2"],
            ["05/14/2014"]
        ]
    ];

foreach ($array as &$arr) {
    $arr = (object)array_map(function ($a) { return $a[0]; }, $arr);
}
echo json_encode($array, JSON_PRETTY_PRINT);

输出:

[
    {
        "0": "item1",
        "1": "itemname",
        "2": "item desc",
        "3": "05\/14\/2014"
    },
    {
        "0": "item12",
        "1": "itemname2",
        "2": "item desc2",
        "3": "05\/14\/2014"
    }
]

3v4l.org 上的演示


推荐阅读