Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 按字段对对象数组排序_Php_Sorting_Tabs - Fatal编程技术网

Php 按字段对对象数组排序

Php 按字段对对象数组排序,php,sorting,tabs,Php,Sorting,Tabs,我想按“日期”字段对以下选项卡进行排序,并计算“临时”字段的总和: 预期结果: 日期=>临时字段的总和 等 PS:很抱歉问一些可能对你来说很简单的问题,我已经在互联网上查过了(例如这里:),但我不明白答案。第一部分相当简单。我们可以使用array\u multisort()按字段对数组的数据进行排序,如下所示: <?php $data = array( 0 => array('id_cra' => '4586', 'temps' => '03:00:00', 'd

我想按“日期”字段对以下选项卡进行排序,并计算“临时”字段的总和:

预期结果:

日期=>临时字段的总和


PS:很抱歉问一些可能对你来说很简单的问题,我已经在互联网上查过了(例如这里:),但我不明白答案。

第一部分相当简单。我们可以使用
array\u multisort()
按字段对数组的数据进行排序,如下所示:

<?php
$data = array(
    0 => array('id_cra' => '4586', 'temps' => '03:00:00', 'date' => '2013-06-03'),
    1 => array('id_cra' => '4587', 'temps' => '03:00:00', 'date' => '2013-06-06'),
    2 => array('id_cra' => '4588', 'temps' => '03:00:00', 'date' => '2013-06-05'), 
    3 => array('id_cra' => '4589', 'temps' => '03:00:00', 'date' => '2013-06-06'),
    4 => array('id_cra' => '4590', 'temps' => '03:00:00', 'date' => '2013-06-07'),
    5 => array('id_cra' => '4591', 'temps' => '02:00:00', 'date' => '2013-06-03'), 
    6 => array('id_cra' => '4592', 'temps' => '03:30:00', 'date' => '2013-06-03')
);

$tmp = array();
foreach($data as $k=>$r){
    $tmp[] = $r['date'];
}
array_multisort($tmp,SORT_DESC,$data);

echo '<pre>',print_r($data),'</pre>';
';
我没有尝试,但它必须是这样的:

$arr=[您的数组数据];//必须排序的数组
usort($arr,'sort_array');
函数排序数组($a,$b){
$timeA=strottime($a['date']);
$timeB=strottime($b['date']);
如果($timeA==$timeB){
返回0;
}
返回$timeA<$timeB?-1:1;
}

在对数组进行排序后,计算总和将是一个循环,您必须按日期“分组”并对“临时数”进行求和。

因此,您希望先按日期分组,然后按日期排序?如果按日期组合,您的
id\u cra
数据将丢失dates@Samuel库克:没关系!很抱歉访问了一个旧问题,但是虽然您的代码是正确的,但是您的示例给出了一个数组列表,而原始问题询问的是一个对象列表。因此,array_multisort()可能不是此处所需的解决方案。
2013-06-03 =>08:30:00
2013-06-06 =>06:00:00
<?php
$data = array(
    0 => array('id_cra' => '4586', 'temps' => '03:00:00', 'date' => '2013-06-03'),
    1 => array('id_cra' => '4587', 'temps' => '03:00:00', 'date' => '2013-06-06'),
    2 => array('id_cra' => '4588', 'temps' => '03:00:00', 'date' => '2013-06-05'), 
    3 => array('id_cra' => '4589', 'temps' => '03:00:00', 'date' => '2013-06-06'),
    4 => array('id_cra' => '4590', 'temps' => '03:00:00', 'date' => '2013-06-07'),
    5 => array('id_cra' => '4591', 'temps' => '02:00:00', 'date' => '2013-06-03'), 
    6 => array('id_cra' => '4592', 'temps' => '03:30:00', 'date' => '2013-06-03')
);

$tmp = array();
foreach($data as $k=>$r){
    $tmp[] = $r['date'];
}
array_multisort($tmp,SORT_DESC,$data);

echo '<pre>',print_r($data),'</pre>';
date_default_timezone_set('America/New_York'); //set timezone
$midnight = mktime(0,0,0,date("n"),date("j"),date("Y")); // create a constant
$times = array();
foreach($data as $d){
     // get number of secs since const
    $time = strtotime(date("Y-m-d",$midnight).' '.$d['temps']) - $midnight;

    if(isset($times[$d['date']])){
        $times[$d['date']] += $time; // if day exists add secs
    }else{
        $times[$d['date']] = $time; // else set day with cur secs
    }
}

foreach($times as $k=>&$time){
    $time = date("Y-m-d H:i:s",strtotime($k)+$time); // reformat to date
}

echo '<pre>',print_r($times),'</pre>';
$arr = [your array data]; // your array which has to be sorted

usort($arr, 'sort_array');

function sort_array($a, $b) {

    $timeA = strtotime($a['date']);
    $timeB = strtotime($b['date']);

    if($timeA == $timeB) {
        return 0;
    }
    return $timeA < $timeB ? -1 : 1;
}