Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从数组中合并json,然后重新创建数组_Php_Arrays_Json - Fatal编程技术网

Php 从数组中合并json,然后重新创建数组

Php 从数组中合并json,然后重新创建数组,php,arrays,json,Php,Arrays,Json,我有一个数组,如下所示 Array ( [photo] => Array ( [0] => {"file_name":"Penguins.jpg", "content_type": "image/jpeg", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699176"} [1] => {"file_name"

我有一个数组,如下所示

Array
(
    [photo] => Array
        (
            [0] => {"file_name":"Penguins.jpg", "content_type": "image/jpeg", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699176"}
            [1] => {"file_name":"Penguins.jpg", "sha256" : "7e5bdd023b6cf21efe42a8ec90bc1993fc853980d4b564688e5ac2d28c64223c" , "size" : "777835"}
            [2] => {"file_name":"sample.png", "content_type": "image/png", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699177"}
            [3] => {"file_name":"sample.png", "sha256" : "e6aa1bf1cdb7ca546576cecd61973939be4f1dc8cec3a4f3b49b31d8f60e202f" , "size" : "278383"}
        )

    [submit] => Upload
)
Array
(
    [photo] => Array
        (
            [0] => {"file_name":"Penguins.jpg", "content_type": "image/jpeg", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699176" , "sha256" : "7e5bdd023b6cf21efe42a8ec90bc1993fc853980d4b564688e5ac2d28c64223c" , "size" : "777835"}

            [1] => {"file_name":"sample.png", "content_type": "image/png", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699177" , "sha256" : "e6aa1bf1cdb7ca546576cecd61973939be4f1dc8cec3a4f3b49b31d8f60e202f" , "size" : "278383"}
        )

    [submit] => Upload
)
我想创建一个数组,如下所示

Array
(
    [photo] => Array
        (
            [0] => {"file_name":"Penguins.jpg", "content_type": "image/jpeg", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699176"}
            [1] => {"file_name":"Penguins.jpg", "sha256" : "7e5bdd023b6cf21efe42a8ec90bc1993fc853980d4b564688e5ac2d28c64223c" , "size" : "777835"}
            [2] => {"file_name":"sample.png", "content_type": "image/png", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699177"}
            [3] => {"file_name":"sample.png", "sha256" : "e6aa1bf1cdb7ca546576cecd61973939be4f1dc8cec3a4f3b49b31d8f60e202f" , "size" : "278383"}
        )

    [submit] => Upload
)
Array
(
    [photo] => Array
        (
            [0] => {"file_name":"Penguins.jpg", "content_type": "image/jpeg", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699176" , "sha256" : "7e5bdd023b6cf21efe42a8ec90bc1993fc853980d4b564688e5ac2d28c64223c" , "size" : "777835"}

            [1] => {"file_name":"sample.png", "content_type": "image/png", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699177" , "sha256" : "e6aa1bf1cdb7ca546576cecd61973939be4f1dc8cec3a4f3b49b31d8f60e202f" , "size" : "278383"}
        )

    [submit] => Upload
)
//这是给定的数组

$result_array = [
    'photos' => [],
    'submit' => 'Upload'
    ];
for($i=0; $i < count($array['photo'])-1; $i++){
    $array_one = json_decode($array['photo'][$i], true);
    $array_two = json_decode($array['photo'][$i++], true);
        array_push($result_array['photos'], array_merge($array_one, $array_two));
}
print_r($result_array);
$result\u数组=[
“照片”=>[],
'提交'=>'上传'
];
对于($i=0;$i
//这是给定的数组

$result_array = [
    'photos' => [],
    'submit' => 'Upload'
    ];
for($i=0; $i < count($array['photo'])-1; $i++){
    $array_one = json_decode($array['photo'][$i], true);
    $array_two = json_decode($array['photo'][$i++], true);
        array_push($result_array['photos'], array_merge($array_one, $array_two));
}
print_r($result_array);
$result\u数组=[
“照片”=>[],
'提交'=>'上传'
];
对于($i=0;$i
这里有一个解决方案,它使用解码的JSON对象构建一个映射,通过其文件名值进行键控,然后应用于将该映射中的对象转换回JSON字符串

中间层将关联数组转换为索引数组:

$data['photo'] = array_map('json_encode', array_values(array_reduce($data['photo'], 
    function($dict, $json) {
        $obj = json_decode($json, true);
        $key = $obj['file_name'];
        if (!isset($dict[$key])) $dict[$key] = [];
        $dict[$key] += $obj; // merging arrays with plus operator
        return $dict;
    }, []))
);
此解决方案不需要两个相关的JSON字符串是连续的。如果数组的顺序是任意的,它就可以工作。如果有两个以上的JSON字符串具有相同的
文件名
属性,并将这些额外的JSON字符串中的任何其他属性连接起来,那么它也可以工作


查看它的运行情况。

这里有一个解决方案,它使用解码的JSON对象构建一个映射,由它们的文件名值键入,然后应用于将该映射中的对象转换回JSON字符串

中间层将关联数组转换为索引数组:

$data['photo'] = array_map('json_encode', array_values(array_reduce($data['photo'], 
    function($dict, $json) {
        $obj = json_decode($json, true);
        $key = $obj['file_name'];
        if (!isset($dict[$key])) $dict[$key] = [];
        $dict[$key] += $obj; // merging arrays with plus operator
        return $dict;
    }, []))
);
此解决方案不需要两个相关的JSON字符串是连续的。如果数组的顺序是任意的,它就可以工作。如果有两个以上的JSON字符串具有相同的
文件名
属性,并将这些额外的JSON字符串中的任何其他属性连接起来,那么它也可以工作


查看它是否继续运行。

您的结构

[
    'photo'  => [
        '0' => '{"file_name":"Penguins.jpg", "content_type": "image/jpeg", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699176"}',
        '1' => '{"file_name":"Penguins.jpg", "sha256" : "7e5bdd023b6cf21efe42a8ec90bc1993fc853980d4b564688e5ac2d28c64223c" , "size" : "777835"}',
        '4' => '{"file_name":"Penguins.jpg", "content_type": "image/jpeg", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699176"}',
        '2' => '{"file_name":"sample.png", "content_type": "image/png", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699177"}',
        '3' => '{"file_name":"sample.png", "sha256" : "e6aa1bf1cdb7ca546576cecd61973939be4f1dc8cec3a4f3b49b31d8f60e202f" , "size" : "278383"}',
    ],
    'submit' => 'Upload'
];
所需输出

[
    [photo] => [
        [0] => {"file_name":"Penguins.jpg","content_type":"image\/jpeg","tmp_path":"\/var\/www\/servergreek.com\/public_html\/www\/imgscript\/tmp\/0048699176","sha256":"7e5bdd023b6cf21efe42a8ec90bc1993fc853980d4b564688e5ac2d28c64223c","size":"777835"}
        [1] => {"file_name":"sample.png","content_type":"image\/png","tmp_path":"\/var\/www\/servergreek.com\/public_html\/www\/imgscript\/tmp\/0048699177","sha256":"e6aa1bf1cdb7ca546576cecd61973939be4f1dc8cec3a4f3b49b31d8f60e202f","size":"278383"}
    ]
    [submit] => Upload
]
代码

    <?php
    $array = getYourArrayStrcuture(); // you don't need this as you already have this array strcuture
    $photoByName = getArrayByFileName($array); // Get array back with file name as key
    $result = convertArrayToJson($photoByName,$array); // convert array to json
    echo "<pre>";
    print_r($result);

    /**
     * Convert array to json
     */
    function convertArrayToJson($photoByName,$array)
    {
        $result = [];
        foreach($photoByName as $key=>$value){
            $result[] = json_encode($value);
        }
        $array['photo'] = $result;
        return $array;
    }

    /**
     * Get array back with file name as key
     */
    function getArrayByFileName($array)
    {
        $photoArray = $array['photo'];
        $photoByName = [];

        foreach ($photoArray as $photo) {
            $itemJsonToArray = json_decode($photo, true);
            if (!isset($photoByName[ $itemJsonToArray['file_name'] ])) {
                $photoByName[ $itemJsonToArray['file_name'] ] = $itemJsonToArray;
            } else {
                $photoByName[ $itemJsonToArray['file_name'] ] = array_merge($photoByName[ $itemJsonToArray['file_name'] ], $itemJsonToArray);
            }
        }

        return $photoByName;
    }

    /**
     * You don't need this as you already have this array structure
     */
    function getYourArrayStrcuture()
    {
        $yourArrayStructure = [
            'photo'  => [
                '0' => '{"file_name":"Penguins.jpg", "content_type": "image/jpeg", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699176"}',
                '1' => '{"file_name":"Penguins.jpg", "sha256" : "7e5bdd023b6cf21efe42a8ec90bc1993fc853980d4b564688e5ac2d28c64223c" , "size" : "777835"}',
                '4' => '{"file_name":"Penguins.jpg", "content_type": "image/jpeg", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699176"}',
                '2' => '{"file_name":"sample.png", "content_type": "image/png", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699177"}',
                '3' => '{"file_name":"sample.png", "sha256" : "e6aa1bf1cdb7ca546576cecd61973939be4f1dc8cec3a4f3b49b31d8f60e202f" , "size" : "278383"}',
            ],
            'submit' => 'Upload'
        ];

        return $yourArrayStructure;
    }
?>

您的结构

[
    'photo'  => [
        '0' => '{"file_name":"Penguins.jpg", "content_type": "image/jpeg", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699176"}',
        '1' => '{"file_name":"Penguins.jpg", "sha256" : "7e5bdd023b6cf21efe42a8ec90bc1993fc853980d4b564688e5ac2d28c64223c" , "size" : "777835"}',
        '4' => '{"file_name":"Penguins.jpg", "content_type": "image/jpeg", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699176"}',
        '2' => '{"file_name":"sample.png", "content_type": "image/png", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699177"}',
        '3' => '{"file_name":"sample.png", "sha256" : "e6aa1bf1cdb7ca546576cecd61973939be4f1dc8cec3a4f3b49b31d8f60e202f" , "size" : "278383"}',
    ],
    'submit' => 'Upload'
];
所需输出

[
    [photo] => [
        [0] => {"file_name":"Penguins.jpg","content_type":"image\/jpeg","tmp_path":"\/var\/www\/servergreek.com\/public_html\/www\/imgscript\/tmp\/0048699176","sha256":"7e5bdd023b6cf21efe42a8ec90bc1993fc853980d4b564688e5ac2d28c64223c","size":"777835"}
        [1] => {"file_name":"sample.png","content_type":"image\/png","tmp_path":"\/var\/www\/servergreek.com\/public_html\/www\/imgscript\/tmp\/0048699177","sha256":"e6aa1bf1cdb7ca546576cecd61973939be4f1dc8cec3a4f3b49b31d8f60e202f","size":"278383"}
    ]
    [submit] => Upload
]
代码

    <?php
    $array = getYourArrayStrcuture(); // you don't need this as you already have this array strcuture
    $photoByName = getArrayByFileName($array); // Get array back with file name as key
    $result = convertArrayToJson($photoByName,$array); // convert array to json
    echo "<pre>";
    print_r($result);

    /**
     * Convert array to json
     */
    function convertArrayToJson($photoByName,$array)
    {
        $result = [];
        foreach($photoByName as $key=>$value){
            $result[] = json_encode($value);
        }
        $array['photo'] = $result;
        return $array;
    }

    /**
     * Get array back with file name as key
     */
    function getArrayByFileName($array)
    {
        $photoArray = $array['photo'];
        $photoByName = [];

        foreach ($photoArray as $photo) {
            $itemJsonToArray = json_decode($photo, true);
            if (!isset($photoByName[ $itemJsonToArray['file_name'] ])) {
                $photoByName[ $itemJsonToArray['file_name'] ] = $itemJsonToArray;
            } else {
                $photoByName[ $itemJsonToArray['file_name'] ] = array_merge($photoByName[ $itemJsonToArray['file_name'] ], $itemJsonToArray);
            }
        }

        return $photoByName;
    }

    /**
     * You don't need this as you already have this array structure
     */
    function getYourArrayStrcuture()
    {
        $yourArrayStructure = [
            'photo'  => [
                '0' => '{"file_name":"Penguins.jpg", "content_type": "image/jpeg", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699176"}',
                '1' => '{"file_name":"Penguins.jpg", "sha256" : "7e5bdd023b6cf21efe42a8ec90bc1993fc853980d4b564688e5ac2d28c64223c" , "size" : "777835"}',
                '4' => '{"file_name":"Penguins.jpg", "content_type": "image/jpeg", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699176"}',
                '2' => '{"file_name":"sample.png", "content_type": "image/png", "tmp_path": "/var/www/servergreek.com/public_html/www/imgscript/tmp/0048699177"}',
                '3' => '{"file_name":"sample.png", "sha256" : "e6aa1bf1cdb7ca546576cecd61973939be4f1dc8cec3a4f3b49b31d8f60e202f" , "size" : "278383"}',
            ],
            'submit' => 'Upload'
        ];

        return $yourArrayStructure;
    }
?>


它们是否总是像您的示例那样按顺序排列?它们是否总是像您的示例那样按顺序排列?不过有一点很好。生成的数组是多段的。如果它的IndexedHanks,@Abiodun,我添加了一个对
array\u value
的中间调用,将关联数组转换为索引数组,那就好了。这正是我需要的……不过有一件事很好。生成的数组是多段的。如果它的indexedThanks,@Abiodun,我添加了一个对
array\u values
的中间调用,以将关联数组转换为索引数组,那就没问题了。我所需要的正是…ThxValues在这段代码中丢失了。
“sha256”
去了哪里?你需要合并条目,而不是取消它们。你是rigth@trincot,没有看到合并效果。我的错误。此代码中的值丢失。
“sha256”
去了哪里?你需要合并条目,而不是取消它们。你是rigth@trincot,没有看到合并效果。我的错。这两个数组总是一样的。您可能想要
++$i
而不是
$i++
。这两个数组总是相同的。您可能想要
++$i
而不是
$i++