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"];
    }
}