如何从JSON数据中获取数组并将其转换为所需的新数组格式?

时间:2015-03-06 10:46:55

标签: php arrays json associative-array key-value

我正在关注JSON请求数据:

data = "{\"photo\":[{\"fileURL\":\"https:\\/\\/www.filepicker.io\\/api\\/file\\/RqAN2jZ7ScC8eOx6ckUE\",\"filename\":\"IMG_0003.JPG\"},{\"fileURL\":\"https:\\/\\/www.filepicker.io\\/api\\/file\\/XdwtFsu6RLaoZurZXPug\",\"filename\":\"IMG_0004.JPG\"}]}";

我想从上面的JSON数据中创建一个数组,格式如下:

Array
(
    [vshare] => Array
        (
            [IMG_0003.JPG] => Array
                (
                    [0] => https://www.filepicker.io/api/file/RqAN2jZ7ScC8eOx6ckUE
                )

            [IMG_0004.JPG] => Array
                (
                    [0] => https://www.filepicker.io/api/file/XdwtFsu6RLaoZurZXPug
                )

        )

)

实际的JSON请求数据可能很大。为了您的参考,我只使用了两个这样的元素。

那么有人可以帮助我为我提供以有效方式实现所需新阵列的方法吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

我认为这会做你想要的。

<?php
$data = "{\"photo\":[{\"fileURL\":\"https:\\/\\/www.filepicker.io\\/api\\/file\\/RqAN2jZ7ScC8eOx6ckUE\",\"filename\":\"IMG_0003.JPG\"},{\"fileURL\":\"https:\\/\\/www.filepicker.io\\/api\\/file\\/XdwtFsu6RLaoZurZXPug\",\"filename\":\"IMG_0004.JPG\"}]}";

$obj = json_decode($data);

$new_ar = array();
foreach ( $obj->photo as $photo ) {
    $new_ar['vshare'][$photo->filename] = array($photo->fileURL);
}
print_r($new_ar);

应该生成

Array
(
    [vshare] => Array
        (
            [IMG_0003.JPG] => Array
                (
                    [0] => https://www.filepicker.io/api/file/RqAN2jZ7ScC8eOx6ckUE
                )

            [IMG_0004.JPG] => Array
                (
                    [0] => https://www.filepicker.io/api/file/XdwtFsu6RLaoZurZXPug
                )

        )

)

答案 1 :(得分:-1)

$ data = json_decode($ data,true);

好吧,试试这个:

$data = "{\"photo\":[{\"fileURL\":\"https:\\/\\/www.filepicker.io\\/api\\/file\\/RqAN2jZ7ScC8eOx6ckUE\",\"filename\":\"IMG_0003.JPG\"},{\"fileURL\":\"https:\\/\\/www.filepicker.io\\/api\\/file\\/XdwtFsu6RLaoZurZXPug\",\"filename\":\"IMG_0004.JPG\"}]}";
$data = json_decode($data,true);
$NewData = false;
foreach($data['photo'] as $k=>$d){
    $NewData['vshare'][$d['filename']][] = $d['fileURL'];
}
var_dump($NewData);