对 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
)
...
)
任何帮助如何做到这一点?非常感谢!!
试试这个
$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;
}
}
可能有更好的方法^-^!
这项工作很好,伙计:
$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
我在 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
)
...
)
任何帮助如何做到这一点?非常感谢!!
试试这个
$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;
}
}
可能有更好的方法^-^!
这项工作很好,伙计:
$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