многомерный массив php получает первое значение даты - PullRequest
1 голос
/ 03 мая 2011

Мне снова нужна помощь.У меня есть массив, и мне нужно извлечь значение веса самого раннего дня.

РЕДАКТИРОВАТЬ - РЕДАКТИРОВАТЬ - РЕДАКТИРОВАТЬ

<code>
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',
  ),
)

Я редактировал это и этокод работает:

<code>
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;

Но так как у меня есть форма на этой странице, которая обновляет массив при обновлении массива - я получил сообщение Неустранимая ошибка: невозможно использовать смещение строки какмассив в

РЕДАКТИРОВАТЬ -> Я повторно объявил это как строку, следовательно ОШИБКА!будьте осторожны при использовании global и include, так как все может стать беспорядком!PHP прощает, но это "прощение" может стоить много времени позже ...:)

Спасибо,
Питер

Ответы [ 4 ]

2 голосов
/ 03 мая 2011

Вы можете отсортировать массив с помощью пользовательского обратного вызова, используя usort(), а затем взять первый элемент.

// $arr is your array
usort($arr, 'sortByDate');
$earliest = $arr[0];

function sortByDate ($arr1, $arr2)
{
   return strcmp($arr1['Date'], $arr2['Date']);
}
1 голос
/ 03 мая 2011

Это один из способов сделать это:

function filter_min($a, $b) {
  return ($a['Date'] < $b['date']) ? $a : $b;
}

$result = array_reduce($array, 'filter_min');
echo $result['Weight'];

Другой способ - просто перебрать массив и найти наименьшую дату.

0 голосов
/ 03 мая 2011

Я заметил, что даты расположены в обратном порядке, причем самая последняя дата указывается первой, а самая ранняя дата - последней.Всегда ли так будет?Если это так, вы можете сделать это:

$index = count($array) - 1;
$earliestdate = $array[$index]['Date'];

Вы также можете использовать array_reverse(), чтобы инвертировать массив и сделать первый элемент ранее последним элементом.

Если это происходитиз MySQL вы также можете изменить запрос на ORDER BY 'Date' DESC (или ASC, который даст вам то, что вы хотите, не помню)

0 голосов
/ 03 мая 2011
$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'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...