我有两个数组,我试图根据它们的日期合并。这是数组的样子:
$a[0][0] = '11/15/08';
$a[0][1] = '50';
$a[1][0] = '11/20/08';
$a[1][1] = '75';
$a[2][0] = '01/04/09';
$a[2][1] = '23';
$a[3][0] = '01/09/09';
$a[3][1] = '92';
和
$b[0][0] = '01/04/09';
$b[0][1] = '30';
$b[1][0] = '01/05/09';
$b[1][1] = '54';
$b[2][0] = '01/08/09';
$b[2][1] = '89';
$b[3][0] = '01/09/09';
$a[3][1] = '62';
在合并结束时,我希望:
$n[0][0] = '11/15/08';
$n[0][1] = '50';
$n[0][2] = '0';
$n[1][0] = '11/20/08';
$n[1][1] = '75';
$n[1][2] = '0';
$n[2][0] = '01/04/09';
$n[2][1] = '23';
$n[2][2] = '30';
$n[3][0] = '01/05/09';
$n[3][1] = '0';
$n[3][2] = '54';
$n[4][0] = '01/08/09';
$n[4][1] = '0';
$n[4][2] = '89';
$n[4][0] = '01/09/09';
$n[4][1] = '92';
$n[4][2] = '62';
这可能吗?
答案 0 :(得分:2)
我首先将数组排序为一个以时间戳为键,数组为数值的数组。这将很容易排序。例如:
$result = array();
foreach (array_merge($a, $b) as $item) {
$date = $item[0];
$dateParts = explode('/', $date);
$timestamp = mktime(0,0,0,$dateParts[0], $dateParts[1], $dateParts[2]);
if (!isset($result[$timestamp])) {
$result[$timestamp] = array();
}
$result[$timestamp][] = $item[1];
}
因为键是日期时间戳,所以我们可以按日期轻松地对数组进行排序:
ksort($result);
然后我们可以将数组转换为您想要的格式
$result2 = array();
foreach ($result as $timestamp => $item) {
$tmp = array();
$tmp[] = date('m/d/y', $timestamp);
$tmp = array_merge($tmp, $item);
$result2[] = $tmp;
}
print_r($result2);
答案 1 :(得分:1)
最简单的方法是将日期用作索引
#Initialization
$n = array();
$n[$date] = array();
$n[$date][0] = "";
$n[$date][1] = "";
#and then
$n["10/01/09"][0] = "10";
$n["10/01/09"][1] = "50";
$n["11/02/09"][1] = "70";
$n["01/05/09"][0] = "90";
--- EDIT
你可以在“array_merge”,“array_combine”中看到这个函数,但是在这个例子中,这可以解决了
答案 2 :(得分:0)
这是我的解决方案:
$a[0][0] = '11/15/08';
$a[0][1] = '50';
$a[1][0] = '11/20/08';
$a[1][1] = '75';
$a[2][0] = '01/04/09';
$a[2][1] = '23';
$a[3][0] = '01/09/09';
$a[3][1] = '92';
$b[0][0] = '01/04/09';
$b[0][1] = '30';
$b[1][0] = '01/05/09';
$b[1][1] = '54';
$b[2][0] = '01/08/09';
$b[2][1] = '89';
$b[3][0] = '01/09/09';
$b[3][1] = '62';
function dates($arr, &$result)
{
foreach ($arr as $dates)
{
$result[$dates[0]][] = $dates[1];
}
}
$result = array();
dates($a, $result);
dates($b, $result);
$dates = array();
$i = 0;
foreach ($result as $date => $res)
{
$dates[$i][0] = $date;
$dates[$i][1] = $res[0];
if (count($res) == 1)
{
$dates[$i][2] = 0;
} else {
$dates[$i][2] = $res[1];
}
$i++;
}
print_r($dates);
输出:
Array
(
[0] => Array
(
[0] => 11/15/08
[1] => 50
[2] => 0
)
[1] => Array
(
[0] => 11/20/08
[1] => 75
[2] => 0
)
[2] => Array
(
[0] => 01/04/09
[1] => 23
[2] => 30
)
[3] => Array
(
[0] => 01/09/09
[1] => 92
[2] => 62
)
[4] => Array
(
[0] => 01/05/09
[1] => 54
[2] => 0
)
[5] => Array
(
[0] => 01/08/09
[1] => 89
[2] => 0
)
)