Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 foreach中按日期对数组项进行分组_Php_Arrays_Date_Foreach_Grouping - Fatal编程技术网

在php foreach中按日期对数组项进行分组

在php foreach中按日期对数组项进行分组,php,arrays,date,foreach,grouping,Php,Arrays,Date,Foreach,Grouping,我在php中有如下数组: Array ( [0] => Array ( [id] => 1 [time] => 2014-11-09T16:32:05 [power] => 0.123 ) [1] => Array ( [id] => 2 [time] => 2014-11

我在php中有如下数组:

Array
(
    [0] => Array
        (
            [id] => 1
            [time] => 2014-11-09T16:32:05
            [power] => 0.123
        )
    [1] => Array
        (
            [id] => 2
            [time] => 2014-11-19T18:32:06
            [power] => 0.208
        )
    [2] => Array
        (
            [id] => 3
            [time] => 2013-09-19T20:32:07
            [power] => 0.106
        ) 
    [3] => Array
        (
            [id] => 4
            [time] => 2013-09-20T10:32:07
            [power] => 0.248
        ) 
    [4] => Array
        (
            [id] => 5
            [time] => 2013-09-20T12:32:07
            [power] => 0.298
        ) 
)
我想计算由以下算法得出的每日电力消耗量

for(i = 0; i < array.lengh - 1; i++){ 
 $power = array.data[i].power; 
 $time_diff = (array.data[i+1].time)/(1000*60*60) - array.data[i].time)/(1000*60*60)); 

 $consumption .= $power * $time_diff; 
} 
(i=0;i $power=array.data[i].power; $time_diff=(array.data[i+1].time)/(1000*60*60)-array.data[i].time)/(1000*60*60)); $consumpion.=$power*$time_diff; }
如何在php中实现这一点,将每天的
$consumption
分组

您可以在这里使用PHP的强大功能。这将为您提供一个unix时间戳,您可以更好地使用它。要回答您的问题,可以采用以下方法

$sortedData = array();
foreach ($data as $element) {
    $timestamp = strtotime($element['time']);
    $date = date("d.m.Y", $timestamp); //truncate hours:minutes:seconds
    if ( ! isSet($sortedData[$date]) ) { //first entry of that day
        $sortedData[$date] = array($element);
    } else { //just push current element onto existing array
        $sortedData[$date][] = $element
    }
}
这将以

Array(
    ['19.09.2013'] => Array(
        [0] => Array([id] => ..., [time] => ..., [power] => ...),
        [1] => Array([id] => ..., [time] => ..., [power] => ...),
        ...
    ),
    ['20.09.2013'] => Array(
        [0] => Array([id] => ..., [time] => ..., [power] => ...),
        [1] => Array([id] => ..., [time] => ..., [power] => ...),
        ...
    ),
    ...
)
为了得到总的能量,只要做如下的事情

foreach ($sortedData as $date=>$elements) {
    $sum = 0;
    foreach ($elements as $element) {
        $sum += $element['power'];
    }
    echo "The total sum for $date is $sum.";
}

这些数据来自数据库吗?如果是,为什么不在那里进行计算呢?不,它们来自此格式的json文件!不应该
$date=date(“d.m.Y”)be
$date=date(“d.m.Y”,时间戳为$timestamp)?非常感谢!代码是有效的,但问题是它不计算消耗,而是计算功率的汇总。为了计算消耗量,数组值之间的时间差必须乘以循环每一步的功率!有什么想法吗?坦斯克!!“数组值之间的时间差”?不清楚。每天第一次和最后一次记录之间的差异?或数组的每个连续元素之间的差异?。。。我很困惑是的,我的意思是->数组中每个连续元素之间的差异。是的,我的意思是->数组中每个连续元素之间的差异。