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++
。