PHP

PHP ソート用キー配列で、配列をソートする uksort() array_flip()

PHP

 

 

array_flip()とuksort()の応用。

 

CSV作成でよく使う🐱

 

<?php

require_once("../vendor/autoload.php");
use Illuminate\Support\Arr;

// ソート用キー
$sort_keys = [
    'id',
    'name',
    'password',
    'skill',
    'role',
    'note',
];

// 対象データ
$users = [
    [
        'note' => "管理者だよ",
        'role' => "Admin",
        'password' => "xxxxx",
        'skill' => "IT",
        'name' => "優さん",
        'id' => 1,
        'BAD_KEY' => "想定しないキーと値だよ🐱"
    ],
    [
        'name' => "田中っち",
        'note' => "",
        'password' => "yyyyy",
        'skill' => "Actor",
        'id' => 2,
        'role' => "Member",
    ],
    [
        'password' => "zzzzz",
        'id' => 3,
        'note' => "",
        'skill' => "Actor",
        'role' => "Guest",
        'name' => "木村",
    ],
];


/**
 * 配列を任意のソートキー配列でソートして返却
 *
 * @param array $data
 * @param array $sort_keys
 * @return array
 */
function ukSortBySortKeys(array $data, array $sort_keys): array
{
    // ソート用にkeyとvalueを反転させる
    $flipped_sort_keys = array_flip($sort_keys);
    // array(6) {
    //     ["id"]=>
    //     int(0)
    //     ["name"]=>
    //     int(1)
    //     ["password"]=>
    //     int(2)
    //     ["skill"]=>
    //     int(3)
    //     ["role"]=>
    //     int(4)
    //     ["note"]=>
    //     int(5)
    // }
    $sorted_data = [];
    foreach ($data as $datum) {
        // 想定しないデータを除去する
        $datum = Arr::only($datum, $sort_keys);
        // ソート
        // @see https://www.php.net/manual/ja/function.uksort.php
        uksort($datum, function ($x, $y) use ($flipped_sort_keys) {
            if ($flipped_sort_keys[$x] === $flipped_sort_keys[$y]) {
                return 0;
            }
            return ($flipped_sort_keys[$x] > $flipped_sort_keys[$y]) ? 1 : -1;
        });
        $sorted_data[$datum['id']] = $datum;
    }
    return $sorted_data;
}

// 実行
var_dump(ukSortBySortKeys($users, $sort_keys));
// array(3) {
//     [1]=>
//     array(6) {
//       ["id"]=>
//       int(1)
//       ["name"]=>
//       string(9) "優さん"
//       ["password"]=>
//       string(5) "xxxxx"
//       ["skill"]=>
//       string(2) "IT"
//       ["role"]=>
//       string(5) "Admin"
//       ["note"]=>
//       string(15) "管理者だよ"
//     }
//     [2]=>
//     array(6) {
//       ["id"]=>
//       int(2)
//       ["name"]=>
//       string(12) "田中っち"
//       ["password"]=>
//       string(5) "yyyyy"
//       ["skill"]=>
//       string(5) "Actor"
//       ["role"]=>
//       string(6) "Member"
//       ["note"]=>
//       string(0) ""
//     }
//     [3]=>
//     array(6) {
//       ["id"]=>
//       int(3)
//       ["name"]=>
//       string(6) "木村"
//       ["password"]=>
//       string(5) "zzzzz"
//       ["skill"]=>
//       string(5) "Actor"
//       ["role"]=>
//       string(5) "Guest"
//       ["note"]=>
//       string(0) ""
//     }
// }

 

 

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)