2012-10-19 76 views
0

我想在PHP中對這個關聯數組進行排序,並沒有找到任何我找到的例子。試圖通過一個鍵排序PHP關聯數組

在無序數組建成這樣:

   //push into array 
      $displayArray = array_push_assoc($displayArray, 'ContactID', $ContactID); 
      $displayArray = array_push_assoc($displayArray, 'ContactFirstName', $ContactFirstName); 
      $displayArray = array_push_assoc($displayArray, 'ContactLastName', $ContactLastName); 
      $displayArray = array_push_assoc($displayArray, 'Ann_Desc', $CG_Desc); 
      $displayArray = array_push_assoc($displayArray, 'DaysAway', $daysAway); 

所有我想要做的是排序這個數組按升序排列的值與相關的「DaysAway」鍵

我已經試過這樣:

  function cmp($a, $b) 
     { 
      if ($a['DaysAway'] == $b['DaysAway']) { 
       return 0; 
      } 

      return ($a['DaysAway'] < $b['DaysAway']) ? -1 : 1; 
     } 
     usort($displayArray, 'cmp'); 

     print_r($displayArray); 
     print "<br>"; 

但所有這確實是看似隨機排序最後一行原始數組中

幫助表示讚賞。

回答

0

刪除所有那些array_push_assoc,因爲沒有該名稱的功能。

取而代之的只是把$displayArray['ContactID'] = $ContactID;等等。

您應該在父數組上調用usort,該數組包含這些$displayArray條目中的每一個,而不是$displayArray本身。

+1

你不認爲OP可以擁有自己的名字? – AlienWebguy

+0

是的,但當簡單的語法可以做同樣的事情時,它是不必要的開銷。 –

+1

@Kolink:平心而論,你要求它被刪除'因爲沒有這個名字的功能.',不是因爲'它沒有必要的開銷'..只是在你知道的地方疼痛> :) – raidenace

0

嘗試使用此功能:

function subval_sort($a,$subkey) { 
foreach($a as $k=>$v) { 
$b[$k] = strtolower($v[$subkey]); 
    } 
    asort($b); 
    foreach($b as $key=>$val) { 
     $c[] = $a[$key]; 
    } 
    return $c; 
} 

$一個將要排序的數組,而$子項將要排序的字段。

+0

'usort($ a,'strcasecmp')'不會做同樣的事情嗎? –

+0

我的原始關聯數組包含四個數組。在使用上面的(和其他例子)之後,使用print_r,我只能在排序後看到一個數組.. ..? – Jeremy