時間のロスを最小限に抑えながら、配列で指定されたアルファベットに従って大きな配列を並べ替える方法は?

ジョン

時間の無駄を最小限に抑えながら、配列で指定された文字で100万個の値を持つ配列を効果的に並べ替える方法。

$letters = array(
"а","б", "в", "г", "ғ", "д", "е", "ё", "ҷ", "ж", "з", "и", "ӣ", "й", "к", "қ", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ӯ", "ф", "х", "ҳ", "ч", "ш", "ъ", "э", "ю", "я"
); 

特定のキーで配列を並べ替えるシンプルな関数。インデックスの関連付けを維持します。この関数は配列もソートしますが、私のアルファベットではなく、英語のアルファベットでソートします(英語の文字でより適切に機能します)。

<?php

function array_sort($array, $on, $order=SORT_ASC)
{
    $new_array = array();
    $sortable_array = array();

    if (count($array) > 0) {
        foreach ($array as $k => $v) {
            if (is_array($v)) {
                foreach ($v as $k2 => $v2) {
                    if ($k2 == $on) {
                        $sortable_array[$k] = $v2;
                    }
                }
            } else {
                $sortable_array[$k] = $v;
            }
        }

        switch ($order) {
            case SORT_ASC:
                asort($sortable_array);
            break;
            case SORT_DESC:
                arsort($sortable_array);
            break;
        }

        foreach ($sortable_array as $k => $v) {
            $new_array[$k] = $array[$k];
        }
    }

    return $new_array;
}

$people = array(
    12345 => array(
        'id' => 12345,
        'first_name' => 'Joe',
        'surname' => 'Bloggs',
        'age' => 23,
        'sex' => 'm'
    ),
    12346 => array(
        'id' => 12346,
        'first_name' => 'Adam',
        'surname' => 'Smith',
        'age' => 18,
        'sex' => 'm'
    ),
    12347 => array(
        'id' => 12347,
        'first_name' => 'Amy',
        'surname' => 'Jones',
        'age' => 21,
        'sex' => 'f'
    )
);

print_r(array_sort($people, 'age', SORT_DESC)); // Sort by oldest first
print_r(array_sort($people, 'surname', SORT_ASC)); // Sort by surname

/*
Array
(
    [12345] => Array
        (
            [id] => 12345
            [first_name] => Joe
            [surname] => Bloggs
            [age] => 23
            [sex] => m
        )

    [12347] => Array
        (
            [id] => 12347
            [first_name] => Amy
            [surname] => Jones
            [age] => 21
            [sex] => f
        )

    [12346] => Array
        (
            [id] => 12346
            [first_name] => Adam
            [surname] => Smith
            [age] => 18
            [sex] => m
        )

)
Array
(
    [12345] => Array
        (
            [id] => 12345
            [first_name] => Joe
            [surname] => Bloggs
            [age] => 23
            [sex] => m
        )

    [12347] => Array
        (
            [id] => 12347
            [first_name] => Amy
            [surname] => Jones
            [age] => 21
            [sex] => f
        )

    [12346] => Array
        (
            [id] => 12346
            [first_name] => Adam
            [surname] => Smith
            [age] => 18
            [sex] => m
        )

)
*/

?>

値でソートする別のバリ​​アント:

<?php 
$data = array(
"US" => "United States", 
"IN" => "India", 
"DE" => "Germany", 
"ES" => "Spain"
);

asort($data); 
print_r($data);
/*
Array ([DE] => Germany

[IN] => India

[ES] => Spain

[US] => United States

) 
*/

?>

ソート用の配列例:

<?php
Array
(
    [0] => дувоздаҳҳазорсоларо
    [2] => мусовиулқувваро
    [3] => фарҳангшиносону
    [6] => илоҳиётшиносони
    [7] => сарнавиштпазирӣ
    [14] => сангнабиштаҳое
    [15] => илоҳиётшиносон
    [16] => музаффариятҳои
    [18] => минтақатулбурҷ
    [20] => фарҳангномаҳои
    [21] => парастишгоҳҳое
    [22] => кишваркушоиҳои
    [23] => парастишгоҳҳои
    [24] => фарҳангшиносон
    [26] => таҷъирнопазир
    [29] => илҳодшиносони
    [30] => сангнабиштаҳо
    [31] => сангнабиштҳои
    [32] => гумроҳкунанда
    [34] => байнаннаҳрайн
    [35] => наанҷомидааст
    [38] => парҳезкоронаи
    [39] => меҳрпарастист
    [42] => дареҷухвазата
    [45] => лашкаркашиҳои
    [47] => мовароуттабиӣ
    [49] => дастнахӯрдагӣ
    [51] => шаҳватпарастӣ
    [53] => аввалиндараҷа
    [56] => меҳрпарастиву
    [57] => ҷаҳоншиносиро
    [58] => меҳрпарастиро
    [60] => зарвонпарастӣ
    [62] => ҳастишиносиву
    [63] => муҳоҷираташон
    [65] => пажӯҳандагон
    [66] => бавуҷудомада
    [67] => ситорашиносӣ
    [72] => нӯҳҳазорсола
    [74] => аҳуромаздост
    [75] => ҷаҳонишиносӣ
);
?>

この結果は、配列からの私のaplphabetでソートされていません:

<?php
    $array = array (
        "ӯктамҷон",
        "ғайрат",
        "маъруфҷон",
        "рустам",
        "карим",
        "ҳурматой",
        "тоҷикӣ",
        "забони тоҷикӣ",
        "адолат"
    );


    echo "<pre>";
        print_r($array);
    echo "</pre>";

    /*
    Array
    (
        [0] => ӯктамҷон
        [1] => ғайрат
        [2] => маъруфҷон
        [3] => рустам
        [4] => карим
        [5] => ҳурматой
        [6] => тоҷикӣ
        [7] => забони тоҷикӣ
        [8] => адолат
    )
    */

    setlocale(LC_ALL, "tg-Cyrl-TJ"); 
    sort($array, SORT_LOCALE_STRING);

    echo "<pre>";
        print_r($array);
    echo "</pre>";

    /*
    Array
    (
        [0] => адолат
        [1] => забони тоҷикӣ
        [2] => карим
        [3] => маъруфҷон
        [4] => тоҷикӣ
        [5] => рустам
        [6] => ғайрат
        [7] => ҳурматой
        [8] => ӯктамҷон
    )
    */

    /*  Result must be:
    Array
    (
        [0] => адолат
        [1] => ғайрат
        [2] => забони тоҷикӣ
        [3] => карим
        [4] => маъруфҷон
        [5] => рустам
        [6] => тоҷикӣ
        [7] => ӯктамҷон
        [8] => ҳурматой
    )
    */
?>
トリンコット

この関数を使用して、配列値を任意の文字順序で並べ替えることができます。これは、2番目の引数として指定する必要があります。

function customSort(&$arr, $charOrder) {
    $mappedChar = $charOrder;
    sort($mappedChar);
    $mapping = array_combine($charOrder, $mappedChar);
    foreach($arr as $str) {
        $mapped[] = strtr($str, $mapping);
    }
    return array_multisort($mapped, $arr);
}

標準のPHP関数と同様に、配列をインプレースで並べ替えます。

使用方法は次のとおりです。

$charOrder = [
"а","б", "в", "г", "ғ", "д", "е", "ё", "ҷ", "ж", "з", "и", "ӣ", "й", "к", "қ", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ӯ", "ф", "х", "ҳ", "ч", "ш", "ъ", "э", "ю", "я"
];

// Sample unsorted array
$arr = [
        "ӯктамҷон",
        "ғайрат",
        "маъруфҷон",
        "рустам",
        "карим",
        "ҳурматой",
        "тоҷикӣ",
        "забони тоҷикӣ",
        "адолат"
    ];

customSort($arr, $charOrder);

上記の例を実行する$arrと、次のコンテンツが表示されます。

array (
  'адолат',
  'ғайрат',
  'забони тоҷикӣ',
  'карим',
  'маъруфҷон',
  'рустам',
  'тоҷикӣ',
  'ӯктамҷон',
  'ҳурматой',
) 

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

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

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ