0

私にはユーザーの配列があり、それらをアルファベット順に並べ替えたいと思います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または使用できるその他の配列関数のロジックを理解できなかったことが原因である可能性があります。

どんな助けでも私には本当に役に立ちます。

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 に答える