我再次需要帮助。我有一个阵列,我需要提取最早的天重值。
编辑 - 编辑 - 编辑
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;
但是因为我在这个页面上有一个表单在更新数组时更新了数组 - 我收到了消息致命错误:不能将字符串偏移用作数组
编辑 - >我已经将其重新声明为字符串,因此错误!使用全球时要小心,因为一切都会变得一团糟! PHP是宽容的,但“宽恕”可能会花费很多时间以后......:)
谢谢,
彼得
答案 0 :(得分:2)
您可以使用usort()
使用自定义回调对数组进行排序,然后获取第一个元素。
// $arr is your array
usort($arr, 'sortByDate');
$earliest = $arr[0];
function sortByDate ($arr1, $arr2)
{
return strcmp($arr1['Date'], $arr2['Date']);
}
答案 1 :(得分:1)
这是一种方法:
function filter_min($a, $b) {
return ($a['Date'] < $b['date']) ? $a : $b;
}
$result = array_reduce($array, 'filter_min');
echo $result['Weight'];
另一种方法是简单地迭代数组并找到最小的日期。
答案 2 :(得分:0)
$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'];
答案 3 :(得分:0)
我注意到日期是相反的顺序,最新日期被拉入,最早的日期最后。会不会像那样?如果是这样,你可以这样做:
$index = count($array) - 1;
$earliestdate = $array[$index]['Date'];
您还可以使用array_reverse()
反转数组,并使第一个元素成为以前的最后一个元素。
如果这是从MySQL引入的,您也可以将查询更改为ORDER BY 'Date' DESC
(或ASC
可以获得您想要的内容,不记得了)