0

我有一组用户,我想根据他们的first_names. 但问题是我保留first_namelast_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

任何帮助都会对我很有帮助。

4

2 回答 2

4

您可以使用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']);
});
于 2013-03-15T09:48:05.717 回答
0

试试这个:使用array_multisorthttp ://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);
于 2013-03-15T09:49:29.217 回答