使用多个条件在php中对关联数组进行排序

Aad*_*adi 3 php arrays associative-array usort multidimensional-array

考虑以下数组

    $details = array( 
 array('lname'=>'A', 'fname'=>'P','membkey'=>700,'head'=>'y'),
 array('lname'=>'B', 'fname'=>'Q','membkey'=>540,'head'=>'n'),
 array('lname'=>'C', 'fname'=>'R','membkey'=>700,'head'=>'n'),
 array('lname'=>'D', 'fname'=>'S','membkey'=>540,'head'=>'y'),
 array('lname'=>'E', 'fname'=>'T','membkey'=>700,'head'=>'n')
    );
Run Code Online (Sandbox Code Playgroud)

在这里,我想用head和membkey排序.同一个membkey元素的顶部元素应该有'head = y'并且回显为,

    $details = array( 
 array('lname'=>'A', 'fname'=>'P','membkey'=>700,'head'=>'y'),
 array('lname'=>'E', 'fname'=>'T','membkey'=>700,'head'=>'n'),
 array('lname'=>'C', 'fname'=>'R','membkey'=>700,'head'=>'n'),
 array('lname'=>'D', 'fname'=>'S','membkey'=>540,'head'=>'y'),
 array('lname'=>'B', 'fname'=>'Q','membkey'=>540,'head'=>'n')
    );
Run Code Online (Sandbox Code Playgroud)

我尝试了如下

    function orderbymemberKey( $a, $b ){
    if ( $a[membkey] == $b[membkey] )
        return 0;
    return($a[membkey] < $b[membkey] )? -1 :1;
 }
 usort( $details, orderbymemberKey );
and it successfully order by membkey.
Run Code Online (Sandbox Code Playgroud)

请给我任何建议.

Dan*_*uis 8

你已经到了一半(虽然你membkey根据你的例子向后排序):

function order_by_member_key($a, $b)
{
  if ($a['membkey'] == $b['membkey'])
  {
    // membkey is the same, sort by head
    if ($a['head'] == $b['head']) return 0;
    return $a['head'] == 'y' ? -1 : 1;
  }

  // sort the higher membkey first:
  return $a['membkey'] < $b['membkey'] ? 1 : -1;
}
usort($details, "order_by_member_key");
Run Code Online (Sandbox Code Playgroud)