2017-06-18 118 views
1
[0] => Array (
    [term] => punk 
    [term_html] => <a href=""> punk </a> 
    ) 
[1] => Array (
    [term] => conflict 
    [term_html] => <a href=""> conflict </a> 
    ) 
[2] => Array (
    [term] => Crass 
    [term_html] => <a href=""> Crass </a> 
    ) 
[3] => Array (
    [term] => bct 2 
    [term_html] => <a href=""> 
    ) 

我如何排序這個數組按字母順序基於內部數組的數組的「術語」?排序多維數組字母

我想這:

function sortByOrder($a, $b) { 
    return $search_terms_html[term]; 
} 

uasort($search_terms_html, 'sortByOrder'); 

,但它不工作:(

+0

[按字母順序排列多維數組](https://stackoverflow.com/questions/5526600/sort-multidimensional-array-alphabetically)可能的副本 –

+0

uksort(); ....... –

+0

剛測試過uksort()...相同的結果 – comdex

回答

2

傳遞到uasort()比較回調函數預計將返回一個值< 0,0,或> 0,描述在你的例子中,回調只是返回不變值$search_terms_html[term];你沒有使用表示數組元素的參數(並且作爲參數傳遞給回調函數sortByOrder())假設'term'元素是字符串,請嘗試定義調用返回爲:

function sortByOrder($a, $b) { 
    return strcmp($a['term'],$b['term']); 
} 

strcmp()返回與回調預期一致的sting比較值。

1

我發現通過它的一個元素進行排序整個多維數組最簡單的方法:

<?php 
$multiArray = Array( 
    Array("id" => 1, "name" => "Defg"), 
    Array("id" => 2, "name" => "Abcd"), 
    Array("id" => 3, "name" => "Bcde"), 
    Array("id" => 4, "name" => "Cdef")); 
$tmp = Array(); 
foreach($multiArray as &$ma) 
    $tmp[] = &$ma["name"]; 
array_multisort($tmp, $multiArray); 
foreach($multiArray as &$ma) 
    echo $ma["name"]."<br/>"; 


?> 

輸出

  • ABCD
  • BCDE
  • CDEF
  • DEFG