Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/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_Arrays_Sorting_Date_Duplicate Removal - Fatal编程技术网

对php数组进行排序,并保留较小的时间重复元素

对php数组进行排序,并保留较小的时间重复元素,php,arrays,sorting,date,duplicate-removal,Php,Arrays,Sorting,Date,Duplicate Removal,我在php中有以下数组$data Array ( [0] => Array ( [time] => 2014-12-01T00:00:00 [value] => 0.0107 ) [1] => Array ( [time] => 2014-12-01T0

我在php中有以下数组$data

   Array
    (
        [0] => Array
            (
                [time] => 2014-12-01T00:00:00
                [value] => 0.0107
            )

        [1] => Array
            (
                [time] => 2014-12-01T00:05:35
                [value] => 0.0321
            )

        [2] => Array
            (
                [time] => 2014-12-01T00:05:35
                [value] => 0.0107
            )

        [3] => Array
            (
                [time] => 2014-12-01T00:06:41
                [value] => 0.0535
            )

        [4] => Array
            (
                [time] => 2014-12-01T00:06:41
                [value] => 0.0107
            )

        [5] => Array
            (
                [time] => 2014-12-01T00:13:04
                [value] => 0.0321
            )
)
我使用以下代码对数组的数据进行排序,按日期填充数据:

$sortedData = array();
foreach ($data as $element) {
    $timestamp = strtotime($element['time']);
   $date = date("d.m.Y", $timestamp); 
    if ( ! isSet($sortedData[$date]) ) { 
        $sortedData[$date] = array($element);
    } else { 
        $sortedData[$date][] = $element;
    }
}
因此,结果是以下结构:

Array
(
    [01.12.2014] => Array
        (
            [0] => Array
                (
                    [time] => 2014-12-01T00:00:00
                    [value] => 0.0107
                )

            [1] => Array
                (
                    [time] => 2014-12-01T00:05:35
                    [value] => 0.0321
                )

            [2] => Array
                (
                    [time] => 2014-12-01T00:05:35
                    [value] => 0.0107
                )

            [3] => Array
                (
                    [time] => 2014-12-01T00:06:41
                    [value] => 0.0535
                )

            [4] => Array
                (
                    [time] => 2014-12-01T00:06:41
                    [value] => 0.0107
                )
...
)
问题是数组包含的元素具有相同的时间但值不同。是否有办法过滤重复项(时间重复元素),以便只保留重复项中较小的(值)元素

所以我想要这样的东西(每个元素的索引是时间,值是前一个数组中复制的元素中较小的一个):

有什么办法吗?非常感谢

试试这个

$sortedDataHash = array();
foreach ($data as $element) {
    $timestamp = strtotime($element['time']);
    if (!isset($sortedDataHash[$timestamp])) {
        $sortedDataHash[$timestamp] = $element;
    } else {
        $sortedDataHash[$timestamp] = $element['value'] < $sortedDataHash[$timestamp]['value']
            ? $element : $sortedDataHash[$timestamp];
    }
}

$sortedData = array();
foreach ($sortedDataHash as $key => $val) {
    $date = date("d.m.Y", $key); 
    if ( ! isSet($sortedData[$date]) ) { 
        $sortedData[$date] = array($val);
    } else { 
        $sortedData[$date][] = $val;
    }
}
$sortedDataHash=array();
foreach($data作为$element){
$timestamp=strottime($element['time']);
如果(!isset($sortedDataHash[$timestamp])){
$sortedDataHash[$timestamp]=$element;
}否则{
$sortedDataHash[$timestamp]=$element['value']<$sortedDataHash[$timestamp]['value']
?$element:$sortedDataHash[$timestamp];
}
}
$sortedData=array();
foreach($key=>$val){
$date=日期(“d.m.Y”,$key);
如果(!isSet($sortedData[$date]){
$sortedData[$date]=数组($val);
}否则{
$sortedData[$date][]=$val;
}
}
可能有更好的方法^-^

这项工作很好:

$sortedData = array();
        foreach ($data as $element) {
            $timestamp = strtotime($element['time']);
            $date = date("d.m.Y", $timestamp); 
            if ( ! isset($sortedData[$date][$element['time']]) ) { 
                $sortedData[$date][$element['time']] = $element;
$sortedData[$date][$element['time']]['lowest_value'] = $element['value'];
            }
                if ($sortedData[$date][$element['time']]['lowest_value'] >  $element['value']) {
                    $sortedData[$date][$element['time']] = $element;
                    $sortedData[$date][$element['time']]['lowest_value'] =  $element['value'];
                }
        }
如果要测试,请单击此处:

您已经完成了一个级别的分组,只需将几乎相同的技术再次应用于“按时间分组”而不是“按日期分组”,以及“替换”而不是“追加”。
$sortedData = array();
        foreach ($data as $element) {
            $timestamp = strtotime($element['time']);
            $date = date("d.m.Y", $timestamp); 
            if ( ! isset($sortedData[$date][$element['time']]) ) { 
                $sortedData[$date][$element['time']] = $element;
$sortedData[$date][$element['time']]['lowest_value'] = $element['value'];
            }
                if ($sortedData[$date][$element['time']]['lowest_value'] >  $element['value']) {
                    $sortedData[$date][$element['time']] = $element;
                    $sortedData[$date][$element['time']]['lowest_value'] =  $element['value'];
                }
        }