我有一个用户数组,我想根据他们的first_names
按字母顺序排序。但问题是,我将first_name
last_name
保存在数组元素的另一个数组中
让我用代码来解释:
$users = [
[
'id' => 1,
'username' => 'asd',
'info' => ['first_name' => 'John', 'last_name' => 'Doe']
],
[
'id' => 2,
'username' => 'martin',
'info' => ['first_name' => 'Martin', 'last_name' => 'Brown']
]
];
我想根据first_name
的值对这个$users
数组进行排序。
我找不到任何解决方案,也许是因为我无法理解array_filter
, array_map
或我可以使用的任何其他数组函数的逻辑。
您可以使用uasort
,通过一个回调来简单地比较名称。
function fncompare($a, $b)
{
return strcmp($a['info']['first_name'], $b['info']['first_name']);
}
uasort($users, "fncompare");
文档中的例子非常清楚。
由于您使用的是PHP5.4,您可以使用匿名函数使其看起来更整洁,因为您可能不会在排序之外使用此方法:
uasort($users, function($a, $b) {
return strcmp($a['info']['first_name'], $b['info']['first_name']);
});
试试这个:使用array_multisort
:http://www.php.net/manual/en/function.array-multisort.php
$arr = array(
array(
'id' => 1,
'username' => 'asd',
'info' => array('first_name' => 'John', 'last_name' => 'Doe')
),
array(
'id' => 2,
'username' => 'martin',
'info' => array('first_name' => 'Martin', 'last_name' => 'Brown')
)
);
$sort = array();
foreach($arr as $k=>$v) {
$sort['first_name'][$k] = $v['info']['first_name'];
}
array_multisort($sort['first_name'], SORT_ASC, $arr);
echo "<pre>";
print_r($arr);