多次元配列を複数のフィールドで並べ替える

パワーブイ

これについていくつか質問がありましたが、ここではかなり特殊なケースがあると感じたので、新しいケースを尋ねています。

最初にユーザーの配列をタイトルの(配列)で並べ替え、次に姓で並べ替える必要があります。次のコードを検討してください。

<?php
$users = [
    [
        'lastName' => 'Clarks',
        'titles' => ['Manager', 'Supervisor']
    ],
    [
        'lastName' => 'Clarkson',
        'titles' => ['Sales']
    ],
    [
        'lastName' => 'Adams',
        'titles' => ['Supervisor']
    ],
    [
        'lastName' => 'Adams',
        'titles' => ['Manager', 'Senior Manager']
    ],
    [
        'lastName' => 'Clarkson',
        'titles' => ['Manager']
    ],
    [
        'lastName' => 'Davids',
        'titles' => ['Senior Manager']
    ]
];

そして、私が欲しい順序は次のとおりです。

<?php
$order = [
    'Senior Manager',
    'Manager',
    'Supervisor'
];

複数のマネージャーがある場合は、lastNameで並べ替える必要があるため、この場合の出力は次のようになります。

<?php
$sorted = [
    [
        'lastName' => 'Adams',
        'titles' => ['Manager', 'Senior Manager']
    ],
    [
        'lastName' => 'Davids',
        'titles' => ['Senior Manager']
    ],
    [
        'lastName' => 'Clarks',
        'titles' => ['Manager', 'Supervisor']
    ],
    [
        'lastName' => 'Clarkson',
        'titles' => ['Manager']
    ],
    [
        'lastName' => 'Adams',
        'titles' => ['Supervisor']
    ],
    [
        'lastName' => 'Clarkson',
        'titles' => ['Sales']
    ]
];

私はこれらの線に沿って何かを試しましたが、それを機能させることができず、デバッグするのが少し難しいことがわかりましたusort

<?php
foreach ($order as $title) {
    usort($users, function ($a, $b) use ($title) {
        # Both have the title
        if (in_array($title, $a['titles']) and in_array($title, $b['titles']) ) {
            # Sort by name
            return strcmp($a['lastName'], $b['lastName']);
        }
        # A has the title
        elseif (in_array($title, $a['titles'])) {
            return 1;
        }
        # B has the title
        elseif (in_array($title, $b['titles'])) {
            return -1;
        }

        # No-one has the title
        return strcmp($a['lastName'], $b['lastName']);
    });
}
Fredrik Jungstedt

必要なのは、のタイトルの最も低いインデックス基づいてユーザーを並べ替えることです$orderを使用しarray_searchて、の各タイトルのインデックス$orderを検索し、を使用して最小の番号を検索できますminそれらが同じである場合は、にフォールバックしstrcmpます。

usort($users, function($a, $b) use ($order) {
    $minAPos = min(array_map(function($title) use ($order) {
        $pos = array_search($title, $order);
        return $pos === false? sizeof($order) : $pos;
    }, $a['titles']));
    $minBPos = min(array_map(function($title) use ($order) {
        $pos = array_search($title, $order);
        return $pos === false? sizeof($order) : $pos;
    }, $b['titles']));

    if($minAPos === $minBPos) {
        return strcmp($a['lastName'], $b['lastName']);
    } else {
        return $minAPos <=> $minBPos;
    }
});

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

多次元配列phpを値を持つ複数のフィールドで並べ替えます

分類Dev

PHPの多次元配列を3つ以上のフィールドで並べ替える

分類Dev

複数の配列要素をフィールドで並べ替える

分類Dev

複数のフィールドで配列を並べ替える

分類Dev

多次元配列のアルファを数値で並べ替える

分類Dev

複数の条件付きでPHPの多次元配列を並べ替える

分類Dev

PHPで複数の値を持つ多次元配列を並べ替える

分類Dev

多次元配列で数値を並べ替える際の問題

分類Dev

複数のフィールドでコマンドを並べ替える

分類Dev

phpサブキー値で複数のレイヤーの深さの多次元配列を並べ替える

分類Dev

PHPで複数のフォームフィールド配列を並べ替える方法は?

分類Dev

複数のフィールドでリストを並べ替える

分類Dev

WordPress / ACF:投稿を複数のフィールドで並べ替える

分類Dev

複数のフィールド(数値に最も近い)で配列を並べ替える

分類Dev

2つのキーで多次元配列を並べ替える方法

分類Dev

PHPのフィールドに基づいて多次元配列を並べ替えます

分類Dev

オブジェクトの配列を複数のフィールドで並べ替える方法は?

分類Dev

1つの配列で複数のフィールドを並べ替える-c ++

分類Dev

MapReduce Python Streamingの複数のフィールドで並べ替える方法は?

分類Dev

VBAで多次元配列の列を並べ替える

分類Dev

多次元配列を2つの配列で並べ替えるPHP

分類Dev

配列内の項目を複数のフィールドでロダッシュで並べ替えます

分類Dev

多次元配列を値の一意の配列キーで並べ替える

分類Dev

キーでphpの異なる形式の多次元配列を並べ替える

分類Dev

多次元配列を3つの値で並べ替える

分類Dev

多次元配列を値の1で並べ替える

分類Dev

APIからの値で多次元配列を並べ替える

分類Dev

多次元配列を2つの値で並べ替える

分類Dev

SQLテーブルを複数の列で並べ替える

Related 関連記事

  1. 1

    多次元配列phpを値を持つ複数のフィールドで並べ替えます

  2. 2

    PHPの多次元配列を3つ以上のフィールドで並べ替える

  3. 3

    複数の配列要素をフィールドで並べ替える

  4. 4

    複数のフィールドで配列を並べ替える

  5. 5

    多次元配列のアルファを数値で並べ替える

  6. 6

    複数の条件付きでPHPの多次元配列を並べ替える

  7. 7

    PHPで複数の値を持つ多次元配列を並べ替える

  8. 8

    多次元配列で数値を並べ替える際の問題

  9. 9

    複数のフィールドでコマンドを並べ替える

  10. 10

    phpサブキー値で複数のレイヤーの深さの多次元配列を並べ替える

  11. 11

    PHPで複数のフォームフィールド配列を並べ替える方法は?

  12. 12

    複数のフィールドでリストを並べ替える

  13. 13

    WordPress / ACF:投稿を複数のフィールドで並べ替える

  14. 14

    複数のフィールド(数値に最も近い)で配列を並べ替える

  15. 15

    2つのキーで多次元配列を並べ替える方法

  16. 16

    PHPのフィールドに基づいて多次元配列を並べ替えます

  17. 17

    オブジェクトの配列を複数のフィールドで並べ替える方法は?

  18. 18

    1つの配列で複数のフィールドを並べ替える-c ++

  19. 19

    MapReduce Python Streamingの複数のフィールドで並べ替える方法は?

  20. 20

    VBAで多次元配列の列を並べ替える

  21. 21

    多次元配列を2つの配列で並べ替えるPHP

  22. 22

    配列内の項目を複数のフィールドでロダッシュで並べ替えます

  23. 23

    多次元配列を値の一意の配列キーで並べ替える

  24. 24

    キーでphpの異なる形式の多次元配列を並べ替える

  25. 25

    多次元配列を3つの値で並べ替える

  26. 26

    多次元配列を値の1で並べ替える

  27. 27

    APIからの値で多次元配列を並べ替える

  28. 28

    多次元配列を2つの値で並べ替える

  29. 29

    SQLテーブルを複数の列で並べ替える

ホットタグ

アーカイブ