2011-05-03 2 views
1

다시 한 번 도움이 필요합니다. 배열이있어서 가장 빠른 일 무게 값을 추출해야합니다. 나는에서 양식이 있기 때문에PHP 다차원 배열이 첫 번째 날짜 값을 얻습니다.

 

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 - - 편집 편집

 

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

나는이 편집 한이 코드는 작동 배열이 업데이트 될 때 배열을 업데이트하는이 페이지 ssage 치명적 오류 : 문자열 오프셋을 배열로 사용할 수 없습니다.

EDIT -> 문자열로 다시 선언 했으므로 오류가 발생했습니다. 모든 것을 혼란스럽게 할 수 있으므로 글로벌 및 포함을 사용할 때는주의하십시오!

감사합니다,
피터 :) ... PHP는 용서하지만 "용서"나중에 많은 시간을 요할 수있다

+0

그것은 쉬울 것이다 당신의 코드를 작성하고 var_dump()의 결과가 아니라 PHP로 적절하게 형성된 배열을 붙여 넣는다면 해결할 수 있습니다 ... – Cups

+0

이것은 멍청한 질문 일지 모르지만'$ weight_tracker' 실수로 어떤 시점에서 배열 대신 문자열로 재 할당되고 있습니까? 이 코드가 오류가 발생한 곳이면'$ weight_tracker'가 배열이어야 할 때 문자열이기 때문입니다. – Wiseguy

+0

관련없는 메모에서 큰 배열의 숫자 키가 DB 등의 레코드 ID 인 것처럼 보입니다. 그 사람들은 보존해야합니까? 현재'usort()'는 그것들을 0,1,2, 등으로 번호를 매긴다. 원래 ID 번호를 지켜야 할 경우 그에 대한 답변을 업데이트하겠습니다. – Wiseguy

답변

2

usort()을 사용하여 사용자 지정 콜백을 사용하여 배열을 정렬 한 다음 첫 번째 요소를 사용할 수 있습니다.

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

function sortByDate ($arr1, $arr2) 
{ 
    return strcmp($arr1['Date'], $arr2['Date']); 
} 
+0

이 작동하지만 페이지가 업데이트되면 치명적인 오류가 발생합니다. 문자열 오프셋을 배열로 사용할 수 없습니다. 질문에서 업데이트했습니다. – Peter

+0

@Peter이 코드로 인해 오류가 발생하는 것을 확인할 수 없습니다. 당신이 그 직후에 추가 한 것에서 나온 건가요? 어쩌면 [this] (http://informationideas.com/news/2006/06/14/fatal-error-cannot-use-string-offset-as-an-array-in/) 도움이 될 것입니다. – Wiseguy

+0

위대한 ... 내 나쁜 - 하나의 포함 된 파일에서 문자열로 다시 선언했습니다 - 도와 주셔서 감사합니다! – Peter

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']; 
1

이 그것을하는 방법 중 하나입니다 :

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

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

또 다른 방법은 단순히 배열을 반복하고 가장 작은 날짜를 찾는 것입니다.

0

날짜가 역순으로 가장 최근 날짜가 가장 먼저 표시되고 가장 빠른 날짜가 가장 늦은 것으로 나타났습니다. 항상 그렇게 될 것입니까? 그렇다면, 당신은이 작업을 수행 할 수 있습니다 : 당신은 또한 배열을 반전 array_reverse()를 사용하여 첫 번째 요소에게 이전에 마지막 요소를 만들 수

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

. 이 MySQL의에서 당겨지는 경우

당신은 또한 ORDER BY 'Date' DESC에 쿼리를 변경할 수있다 (또는 당신이 기억하지 못하는 원하는 걸 얻을 것이라고 ASC입니다) 다른 사람이 복사 할

+0

사실 그들은 순서가 맞지 않지만 가능한/적용 가능한 경우 DB 쿼리에서 주문하는 것에 동의합니다. – Wiseguy

+0

아, 네 말이 맞아. 02-05-2011이 2011 년 2 월 10 일 이전임을 알지 못했다. – Phoenix

관련 문제