从多维数组中获取“相同键”值

时间:2013-03-15 09:44:25

标签: php multidimensional-array

我有一组用户,我想根据他们的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_filterarray_map或任何其他数组的逻辑我可以使用的功能。

任何帮助对我都有帮助。

2 个答案:

答案 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_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);