【问题标题】:sorting multi dimensional array alphabetically按字母顺序排序多维数组
【发布时间】:2017-06-18 18:17:52
【问题描述】:
[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');

但它不起作用:(

【问题讨论】:

标签: php arrays sorting


【解决方案1】:

传递给uasort() 的比较回调函数预期返回值 0,描述其参数之间的关系。在您的示例中,回调只是返回不变的值$search_terms_html[term];您没有使用表示数组元素的参数(并作为参数传递给回调函数,sortByOrder())。假设“术语”元素是字符串,尝试将回调定义为:

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

strcmp() 返回与回调预期一致的 sting 比较值。

【讨论】:

    【解决方案2】:

    我发现按一个元素对整个多维数组进行排序的最简单方法:

    <?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
    • 配置文件

    【讨论】:

      猜你喜欢
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多