2010-04-20 154 views
14

我有一个由数组组成的数组。我想通过子数组的属性对父数组进行排序。下面是一个例子按PHP中子数组的值对数组进行排序

array(2) { 
    [0]=> 
    array(3) { 
    [0]=> 
    string(6) "105945" 
    [1]=> 
    string(10) "First name" 
    [2]=> 
    float(0.080878465391) 
    } 
    [1]=> 
    array(3) { 
    [0]=> 
    string(6) "109145" 
    [1]=> 
    string(11) "Second name" 
    [2]=> 
    float(0.0504154818384) 
} 

我想在子阵列由[2]上升父数组进行排序,所以在这种情况下,结果将是相反的子阵列(0.05,08)。这可能使用任何众多的PHP排序功能?

回答

24

您可以使用usort功能为:

$arr = array(
       array("105945","First name",0.080878465391), 
       array("109145","Second name",0.0504154818384) 
      ); 

function cmp($a, $b) { 
     if ($a[2] == $b[2]) { 
       return 0; 
     } 
     return ($a[2] < $b[2]) ? -1 : 1; 
} 

usort($arr,"cmp"); 
+0

该页面上的示例#2与您正在尝试执行的操作非常相似,请查看该示例。 – 2010-04-20 06:09:07

+0

已更新我的答案,正是你想要的。 – codaddict 2010-04-20 06:14:28

+0

哇,非常有帮助的答案。谢谢。 – Evan 2010-04-20 06:17:08

-2

看到这个页面,例如

http://php.net/manual/en/function.sort.php 

或例如

 <?php 
function multisort($array, $sort_by) { 
    foreach ($array as $key => $value) { 
     $evalstring = ''; 
     foreach ($sort_by as $sort_field) { 
      $tmp[$sort_field][$key] = $value[$sort_field]; 
      $evalstring .= '$tmp[\'' . $sort_field . '\'], '; 
     } 
    } 
    $evalstring .= '$array'; 
    $evalstring = 'array_multisort(' . $evalstring . ');'; 
    eval($evalstring); 

    return $array; 
} 

$test = array(
    array('a' => '1', 'b' => '3'), 
    array('a' => '2', 'b' => '1'), 
    array('a' => '1', 'b' => '1')); 

echo 'Unsorted: '; 
print_r($test); 

$result = multisort($test , array('a','b')); 

echo 'Sorted: '; 
print_r($result); 
?> 

Result: 

Unsorted: Array 
(
    [0] => Array 
     (
      [a] => 1 
      [b] => 3 
     ) 

    [1] => Array 
     (
      [a] => 2 
      [b] => 1 
     ) 

    [2] => Array 
     (
      [a] => 1 
      [b] => 1 
     ) 

) 
Sorted: Array 
(
    [0] => Array 
     (
      [a] => 1 
      [b] => 1 
     ) 

    [1] => Array 
     (
      [a] => 1 
      [b] => 3 
     ) 

    [2] => Array 
     (
      [a] => 2 
      [b] => 1 
     ) 

) 
+1

这是一些非常可怕的代码 - 我强烈建议你不要使用它。按照建议使用'usort()'。 – 2010-04-20 06:12:50

+0

hey usort()函数已经提供。所以只有我提供了另一种解决方案,我提供了手册中的示例。 – Karthik 2010-04-20 06:40:09

4

对于数据库状花纹使用array_multisort在看到例#3。

例如:

$sort = array(); 
foreach ($data as $key => $row) { 
    $sort[$key] = $row['basis']; 
} 
array_multisort($sort, SORT_ASC, $data); 

其中$data是您的数据阵列和basis是用于排序的元素。

+0

太棒了!感谢分享。 – BarryMode 2017-01-25 18:33:14