Php 使用另一个日期数组从数组中查找调用数据的总和
我想找到第二个数组中日期之间的总调用数。我需要像这样出去 我有用于循环的输出,但我不想用于循环Php 使用另一个日期数组从数组中查找调用数据的总和,php,Php,我想找到第二个数组中日期之间的总调用数。我需要像这样出去 我有用于循环的输出,但我不想用于循环 $array1 = Array ( [0] => Array ( [day] => 2014-05-07 [total_Calls] => 1 ) [1] => Array ( [day] => 2014-05-09
$array1 = Array (
[0] => Array
(
[day] => 2014-05-07
[total_Calls] => 1
)
[1] => Array
(
[day] => 2014-05-09
[total_Calls] => 1
)
[2] => Array
(
[day] => 2014-05-12
[total_Calls] => 1
)
[3] => Array
(
[day] => 2014-05-13
[total_Calls] => 1
)
[4] => Array
(
[day] => 2014-05-14
[total_Calls] => 2
)
[5] => Array
(
[day] => 2014-05-16
[total_Calls] => 4
)
);
$array2 = Array (
[0] => Array
(
[report_date] => 1397413800-1397932200
)
[1] => Array
(
[report_date] => 1398018600-1398537000
)
[2] => Array
(
[report_date] => 1398623400-1399141800
)
[3] => Array
(
[report_date] => 1399228200-1399746600
)
[4] => Array
(
[report_date] => 1399833000-1400351400
)
[5] => Array
(
[report_date] => 1400437800-1400956200
)
)
蛮力
[1397413800-1397932200] => 0
[1398018600-1398537000] => 0
[1398623400-1399141800] => 0
[1399228200-1399746600] => 2
[1399833000-1400351400] => 9
[1400437800-1400956200] => 8
避免使用循环是没有意义的。事实上,不管你怎么做,你都会使用循环。要么编写一个函数,要么使用最终将使用它的本机函数或自定义函数。因为这就是通过数组的方式
然而,您可能想要做的是尽量减少循环。并尽可能在循环外部(大部分)进行繁重的工作,例如strotime()
我已经对您的代码进行了一次检查并将其压缩。您将在$new\u数组中显示结果
<?php
$from_to = array();
foreach ($array2 as $data) {
$days = explode('-', $data['report_date']);
$from_to[] = $days;
}
$counter = array();
foreach ($array1 as $data) {
$day = new Datetime($data['day'], new Datetimezone('UTC'));
$timestamp = $day->('U');
foreach ($from_to as $range) {
if ($timestamp >= $range[0] && $timestamp <= $range[1]) {
$key = implode('-', $range);
if (!isset($counter[$key])) {
$counter[$key] = 0;
}
$counter[$key] += $data['total_Calls'];
}
}
}
print_r($counter);
foreach($array1作为$key=>$value)
$array1[$key][“timestamp”]=strotime($array1[$key][“day”]);
foreach($array2作为$report){
$new_数组[$report[“report_date”]]=0;
$from_to=array_map(“intval”,explode(“-”,$report[“report_date”]);
foreach($array1作为$call\u日){
$day=$call_day[“时间戳”];
如果($day>=$from_至[0]&&$day<$from_至[1])
$new_数组[$report[“report_date”]+=$call_day[“total_Calls”];
}
}
我需要像这样出去。那个么你们做了些什么呢?我已经做过像这样使用for循环,但我不想使用for循环,不要把代码作为注释发布。而不是编辑你的问题,并更新代码编辑的问题,并把我的代码,我已用于输出。将其设为+ve。您当前的代码没有提供该输出
<?php
$from_to = array();
foreach ($array2 as $data) {
$days = explode('-', $data['report_date']);
$from_to[] = $days;
}
$counter = array();
foreach ($array1 as $data) {
$day = new Datetime($data['day'], new Datetimezone('UTC'));
$timestamp = $day->('U');
foreach ($from_to as $range) {
if ($timestamp >= $range[0] && $timestamp <= $range[1]) {
$key = implode('-', $range);
if (!isset($counter[$key])) {
$counter[$key] = 0;
}
$counter[$key] += $data['total_Calls'];
}
}
}
print_r($counter);
foreach($array1 as $key=>$value)
$array1[$key]["timestamp"] = strtotime($array1[$key]["day"]);
foreach($array2 as $report) {
$new_array[$report["report_date"]] = 0;
$from_to = array_map("intval",explode("-",$report["report_date"]));
foreach($array1 as $call_day) {
$day = $call_day["timestamp"];
if ($day >= $from_to[0] && $day < $from_to[1])
$new_array[$report["report_date"]] += $call_day["total_Calls"];
}
}