2

如何按其中一个值对关联数组进行排序?

例如:

$arr = array(
    'ted' => array( 'age' => 27 ),
    'bob' => array( 'age' => 18 ),
    'jay' => array( 'age' => 24 )
);

$arr = ???

foreach ($arr as $person)
    echo $person['age'], ', ';

所以输出是:

18, 24, 27

这是一个过于简单的例子,只是为了证明我的问题。

我仍然需要它$arr是一个关联数组。

4

5 回答 5

7

uasort()函数允许您指定一个回调函数,该函数将负责在两个元素之间进行比较——因此,如果您实现了正确的回调函数,应该会做得很好。

在这里,您必须实现一个回调函数,该函数将接收两个数组 - 并比较ageitem :

function callback($a, $b) {
  if ($a['age'] > $b['age']) {
    return 1;
  } else if ($a['age'] < $b['age']) {
    return -1;
  }
  return 0;
}


在以下代码部分中使用该函数:

$arr = array(
    'ted' => array( 'age' => 27 ),
    'bob' => array( 'age' => 18 ),
    'jay' => array( 'age' => 24 )
);

uasort($arr, 'callback');
var_dump($arr);

你会得到这个结果数组:

array
  'bob' => 
    array
      'age' => int 18
  'jay' => 
    array
      'age' => int 24
  'ted' => 
    array
      'age' => int 27
于 2011-03-31T11:01:40.533 回答
7

这是 PHP 5.3 匿名函数派上用场的经典示例:

uasort($arr, function($a, $b) {
    return $a['age'] - $b['age'];
});

$a['age'] - $b['age']是一个小技巧。它之所以有效,是因为回调函数预计返回一个值 < 0 是$a小于$b和一个值 > 0 如果$a大于$b

于 2011-03-31T11:03:03.030 回答
1

http://www.php.net/manual/en/array.sorting.php

这种特殊情况将涉及使用一种使用回调进行排序的排序方法

于 2011-03-31T11:00:21.813 回答
1

由于您正在对子数组中的值进行排序,因此没有内置函数可以完成 100% 的工作。我会做一个用户定义的排序:

http://www.php.net/manual/en/function.uasort.php

这是一个示例比较函数,它根据嵌套数组中的此值返回其比较

<?php
// Comparison function
function cmp($left, $right) {
    $age1 = $left['age'];
    $age2 = $right['age'];
    if ($age1 == $age2) {
        return 0;
    }
    return ($age1 < $age2) ? -1 : 1;
}

uasort($array, 'cmp');
于 2011-03-31T11:01:25.990 回答
0

您不仅对关联数组进行排序,还在对关联数组的关联数组进行排序;)

uasort调用是您所追求

uasort($array, function ($a, $b) {
    if ($a['age'] === $b['age']) {
        return 0;
    }
    return $a['age'] > $a['age'] ? 1 : -1;
});
于 2011-03-31T11:14:04.103 回答