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


Sort php array and keep the smaller of time duplicated elements

我在 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
                )
...
)

问题是数组包含具有相同时间但不同值的元素。有没有办法过滤重复项(时间重复的元素)以便只保留重复项的较小(值)元素?

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

Array
(
    [01.12.2014] => Array
        (
            [2014-12-01T00:00:00] => Array
                (
                    [time] => 2014-12-01T00:00:00
                    [value] => 0.0107
                )
            [2014-12-01T00:05:35] => Array
                (
                    [time] => 2014-12-01T00:05:35
                    [value] => 0.0107
                )
            [2014-12-01T00:06:41] => Array
                (
                    [time] => 2014-12-01T00:06:41
                    [value] => 0.0107
                )
...
)

有什么帮助吗?多谢!!

这项工作很好,伙计:

$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'];
                }
        }

如果您想在这里测试:http://ideone.com/9W5lbZ

试试这个

$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;
    }
}

可能有更好的出口方法^-^!