2010-05-20 101 views
0

所以我得到了一个非常大的数据数组,并且需要按照两个条件对它们进行排序。第二次使用php usort排序

有变量$data['important']$data['basic']

他们是简单的数字,我使用uasort排序 $data首先重要,然后由基本。

所以

Important | Basic 
10  | 8 
9   | 9 
9   | 7 
7   | 9 

的usort功能是一种简单的

public function sort_by_important($a, $b) { 

     if ($a[important] > $b[important]) { 
      return -1; 
     } 
     elseif ($b[important] > $a[important]) { 
      return 1; 
     } 
     else { 
      return 0; 
     } 
    } 

我怎样才能阵列到第二个变量进行重新排序,并保持重要顺序?

谢谢大家。

编辑

这个怎么样,即使后加入第三排序选项?如此重要>基本>少

回答

3

你真的应该使用array_multisort()

// Obtain a list of columns 
foreach ($data as $key => $row) { 
    $important[$key] = $row['important']; 
    $basic[$key] = $row['basic']; 
} 

array_multisort($important, SORT_NUMERIC, SORT_DESC, 
       $basic, SORT_NUMERIC, SORT_DESC, 
       $data); 

,但如果你必须使用usort()

public function sort_by_important($a, $b) { 

    if ($a[important] > $b[important]) { 
     return -1; 
    } elseif ($b[important] > $a[important]) { 
     return 1; 
    } else { 
     if ($a[basic] > $b[basic]) { 
      return -1; 
     } elseif ($b[basic] > $a[basic]) { 
      return 1; 
     } else { 
      return 0; 
     } 
    } 
} 
1

为什么不能简单地用在array_multisort()

public function sort_by_important($a, $b) { 
    if ($a['Important'] > $b['Important']) { 
     return -1; 
    } elseif ($b['Important'] > $a['Important']) { 
     return 1; 
    } else { 
     if ($a['Basic'] > $b['Basic']) { 
      return -1; 
     } elseif ($b['Basic'] > $a['Basic']) { 
      return 1; 
     } else { 
      return 0; 
     } 
    } 
} 
+0

array_multisort是正确的答案,我必须给予肯尼分,因为他给了我答案将这个订单放入单独的变量是让我困惑的一点。谢谢你的帮助! – bluedaniel 2010-05-20 16:18:30