从多维数组中获取'same key'值



我有一个用户数组,我想根据他们的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);

相关内容

  • 没有找到相关文章

最新更新