php多维数组获取第一个日期值

时间:2011-05-03 15:16:58

标签: php arrays multidimensional-array

我再次需要帮助。我有一个阵列,我需要提取最早的天重值。

编辑 - 编辑 - 编辑


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是宽容的,但“宽恕”可能会花费很多时间以后......:)

谢谢,
彼得

4 个答案:

答案 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可以获得您想要的内容,不记得了)