2017-06-18 51 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