Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 如何合并2个数组,但在日期相同的位置合并它们_Php_Mysql_Arrays_Json - Fatal编程技术网

Php 如何合并2个数组,但在日期相同的位置合并它们

Php 如何合并2个数组,但在日期相同的位置合并它们,php,mysql,arrays,json,Php,Mysql,Arrays,Json,我有两个数组,我想合并它们,但在日期相同的地方合并。我设法将它们合并,但如果日期相同,它会将它们合并为不同的条目。以下是我的两个阵列: arr1: arr2: 当我使用$arr=array\u merge($arr1,$arr2)时它将它们合并,但在日期相同的情况下,在我的例子2015-05-27中,我想将它们合并为“y”:“2015-05-27”,“item1”:“1037”,“item2”:“25”您可以通过两次。1) 数组\在日期合并和排序2)由于数组已排序,您可以线性遍历数组以合并和删除

我有两个数组,我想合并它们,但在日期相同的地方合并。我设法将它们合并,但如果日期相同,它会将它们合并为不同的条目。以下是我的两个阵列: arr1:

arr2:


当我使用
$arr=array\u merge($arr1,$arr2)时它将它们合并,但在日期相同的情况下,在我的例子2015-05-27中,我想将它们合并为
“y”:“2015-05-27”,“item1”:“1037”,“item2”:“25”

您可以通过两次。1) 数组\在日期合并和排序2)由于数组已排序,您可以线性遍历数组以合并和删除重复的日期

您可以尝试这种方法,将日期的项目数组映射到具有日期键的关联数组中,然后仅添加具有非零值的其他项目。请参见代码中的注释:

// Make PHP arrays of JSON
$items1 = json_decode('[
{"y":"2015-03-05","item1":"850","item2":"0"},
{"y":"2015-03-19","item1":"8377","item2":"0"},
{"y":"2015-05-27","item1":"1037","item2":"0"},
{"y":"2015-10-15","item1":"5402","item2":"0"}]', true);

$items2 = json_decode('[
{"y":"2015-04-29","item1":"0","item2":"1008"},
{"y":"2015-05-27","item1":"0","item2":"25"}]', true);

// Define an associative array like:
// [
//   '<date>' => [ 'item1' => '<n>', 'item2' => "<n>" ],
//   ...
// ]
$itemsPerDay = [];

// Loop arrays
foreach (array_merge($items1, $items2) as $array) {
    $date = $array['y']; // Get date

    if (!isset($itemsPerDay[$date])) {
        // If array for date not set in associative array, use full array
        $itemsPerDay[$date] = $array;
    }
    else {
        // If array for date already exists, merge only items having a
        // non-empty value
        $nonEmptyValues = array_filter($array, function($w) { return !empty($w); });
        $itemsPerDay[$date] = array_merge($itemsPerDay[$date], $nonEmptyValues);
    }
}

// Get values part of associative array
$itemsPerDay = array_values($itemsPerDay);

// Output JSON
echo json_encode($itemsPerDay);

您可以尝试使用
$result=array\u merge\u recursive($ar1,$ar2)array\u merge\u recursive
我得到了相同的结果
[{"y":"2015-04-29","item1":"0","item2":"1008"},
{"y":"2015-05-27","item1":"0","item2":"25"}]
// Make PHP arrays of JSON
$items1 = json_decode('[
{"y":"2015-03-05","item1":"850","item2":"0"},
{"y":"2015-03-19","item1":"8377","item2":"0"},
{"y":"2015-05-27","item1":"1037","item2":"0"},
{"y":"2015-10-15","item1":"5402","item2":"0"}]', true);

$items2 = json_decode('[
{"y":"2015-04-29","item1":"0","item2":"1008"},
{"y":"2015-05-27","item1":"0","item2":"25"}]', true);

// Define an associative array like:
// [
//   '<date>' => [ 'item1' => '<n>', 'item2' => "<n>" ],
//   ...
// ]
$itemsPerDay = [];

// Loop arrays
foreach (array_merge($items1, $items2) as $array) {
    $date = $array['y']; // Get date

    if (!isset($itemsPerDay[$date])) {
        // If array for date not set in associative array, use full array
        $itemsPerDay[$date] = $array;
    }
    else {
        // If array for date already exists, merge only items having a
        // non-empty value
        $nonEmptyValues = array_filter($array, function($w) { return !empty($w); });
        $itemsPerDay[$date] = array_merge($itemsPerDay[$date], $nonEmptyValues);
    }
}

// Get values part of associative array
$itemsPerDay = array_values($itemsPerDay);

// Output JSON
echo json_encode($itemsPerDay);
[{"y": "2015-03-05", "item1": "850",  "item2": "0"},
 {"y": "2015-03-19", "item1": "8377", "item2": "0"},
 {"y": "2015-05-27", "item1": "1037", "item2": "25"},
 {"y": "2015-10-15", "item1": "5402", "item2": "0"},
 {"y": "2015-04-29", "item1": "0",    "item2": "1008"}]