我再次需要帮助。我有一个数组,我需要提取最早一天的权重值。
EDIT - EDIT - EDIT
<>之前
array (
3 =>
array (
'id' => '20110211',
'Date' => '2011-02-11',
'Weight' => '195',
),
4 =>
array (
'id' => '20110213',
'Date' => '2011-02-13',
'Weight' => '160',
),
6 =>
array (
'id' => '20110310',
'Date' => '2011-03-10',
'Weight' => '200',
),
12 =>
array (
'id' => '20110301',
'Date' => '2011-03-01',
'Weight' => '55',
),
21 =>
array (
'id' => '20110215',
'Date' => '2011-02-15',
'Weight' => '120',
),
25 =>
array (
'id' => '20110322',
'Date' => '2011-03-22',
'Weight' => '250',
),
)
我已经编辑了这个,这个代码可以工作:
<>之前
function sortByDate ($arr1, $arr2)
{
return strcmp($arr1['Date'], $arr2['Date']);
}
// $arr is your array
usort($weight_tracker, 'sortByDate');
$earliest = $weight_tracker[0]['Weight'];
echo $earliest;
但是因为我在这个页面上有一个表单,当数组更新时更新数组-我得到消息致命错误:不能在
中使用字符串偏移作为数组EDIT ->我已经将其重新声明为字符串,因此出现了ERROR !在使用global和include时要小心,因为一切都可能变得一团糟!PHP是宽容的,但是这种"宽容"可能会在以后花费很多时间……:)
谢谢,
彼得。
您可以使用usort()
自定义回调对数组进行排序,然后取第一个元素
// $arr is your array
usort($arr, 'sortByDate');
$earliest = $arr[0];
function sortByDate ($arr1, $arr2)
{
return strcmp($arr1['Date'], $arr2['Date']);
}
这是一种方法:
function filter_min($a, $b) {
return ($a['Date'] < $b['date']) ? $a : $b;
}
$result = array_reduce($array, 'filter_min');
echo $result['Weight'];
另一种方法是简单地遍历数组并找到最小的日期。
$smallest = null; // array index of entry with smallest weight.
foreach ($array as $idx => $data) {
if (($data['Weight'] < $array[$smallest]['Weight']) || (is_null($smallest))) {
$smallest = $idx; // found a small weight, so save the index
}
}
echo $array[$smallest]['Date'];
我注意到日期的顺序是相反的,最晚的日期放在前面,最早的日期放在最后。会永远这样吗?如果是,你可以这样做:
$index = count($array) - 1;
$earliestdate = $array[$index]['Date'];
您也可以使用array_reverse()
来反转数组并使第一个元素成为先前的最后一个元素。
如果这是从MySQL中拉进来的,你也可以将查询更改为ORDER BY 'Date' DESC
(或者它是ASC
,会得到你想要的,不记得了)