我有一组用户,我想根据他们的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']
]
];
我想根据$users
的值对此first_name
数组进行排序。
我无法找到任何解决方案,也许是因为我无法理解array_filter
,array_map
或任何其他数组的逻辑我可以使用的功能。
任何帮助对我都有帮助。
答案 0 :(得分:3)
您可以使用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']);
});
答案 1 :(得分:0)
试试这个:使用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);