2015-09-21 30 views
1

我有一个数组是多个数据库表合并在一起成为所需信息的数组。我想按名称按字母顺序排列这些信息,如果它是同一个名字,则按id排序。排序多维数组(了解Usort和MultiSort)

我查看了以下所有主题,但无法产生工作结果。

我作为sudo的ARRAY倾倒

array(3){ 
    [0] => array(3){ 
     ['id'] => "1", 
     ['name'] => "Slippery Sasha", 
     ['type'] => "Electric Eel" 
    }, 
    [1] => array(3){ 
     ['id'] => "2", 
     ['name'] => "Viscious Vipers", 
     ['type'] => "Snake" 
    }, 
    [2] => array(3){ 
     ['id'] => "3", 
     ['name'] => "Finnic Fox", 
     ['type'] => "Rabid Fox" 
    }, 
} 

代码尝试

// Sort 
     $sortByTypes = array('name', 'id', 'type'); 
     usort($returnArray, function($a, $b) use($sortByTypes){ 
      foreach($sortByTypes as $field){ 
       $sort = strnatcasecmp($a[$field], $a[$field]); 
       if($sort !== 0){ 
        break; 
       } 
      } 
      return $sort; 
     }); 

MY INTENDED DUMP

array(3){ 
     [0] => array(3){ 
      ['id'] => "3", 
      ['name'] => "Finnic Fox", 
      ['type'] => "Rabid Fox" 
     }, 
     [1] => array(3){ 
      ['id'] => "1", 
      ['name'] => "Slippery Sasha", 
      ['type'] => "Electric Eel" 
     }, 
     [2] => array(3){ 
      ['id'] => "2", 
      ['name'] => "Viscious Vipers", 
      ['type'] => "Snake" 
     }, 

    } 

BONUS 如果你能解释一下它是如何工作以及它是做给数组给我更好的理解排序这个功能太棒了!

回答

1

您可以使用usort等作为

usort($arr,function($a,$b){ 
    $c = strcasecmp($a['name'], $b['name']); 
    $c .= $a['id'] - $b['id']; 
    return $c; 
}); 
print_r($arr); 

Demo

+0

这仍然表明该阵列由id来,而不是由名称排序。 –

+0

您的预期产出是多少?而且我认为它的工作原来是预期的 –

+0

我更新了我的问题以回答预期的结果。但基本上abc按数组中的名称列排序。但是,如果名称与其他名称相同,则按ID排序。 –