如何使用PHP中包含的关联数组的子字段对关联数组进行排序?

Lea*_*yes 2 php arrays sorting asort

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

例如:

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

$arr = ???

foreach ($arr as $person)
    echo $person['age'], ', ';
Run Code Online (Sandbox Code Playgroud)

所以输出是:

18, 24, 27
Run Code Online (Sandbox Code Playgroud)

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

我仍然要求它$arr是一个关联数组.

Pas*_*TIN 7

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

在这里,您必须实现一个将接收两个数组的回调函数 - 并对该项进行压缩age:

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


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

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

uasort($arr, 'callback');
var_dump($arr);
Run Code Online (Sandbox Code Playgroud)

你会得到这个结果数组:

array
  'bob' => 
    array
      'age' => int 18
  'jay' => 
    array
      'age' => int 24
  'ted' => 
    array
      'age' => int 27
Run Code Online (Sandbox Code Playgroud)


Ste*_*rig 7

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

uasort($arr, function($a, $b) {
    return $a['age'] - $b['age'];
});
Run Code Online (Sandbox Code Playgroud)

$a['age'] - $b['age']是一个小技巧.它的工作原理,因为回调函数预计将返回一个值<0 $a小于$b和值> 0,如果$a比我的大$b.