Comment je peux trier un tableau avec des millions de valeurs par des lettres spécifiées dans le tableau efficacement avec une perte de temps minimale.Comment trier un grand tableau en fonction de l'alphabet spécifié dans le tableau avec une perte de temps minimale?
$letters = array(
"а","б", "в", "г", "ғ", "д", "е", "ё", "ҷ", "ж", "з", "и", "ӣ", "й", "к", "қ", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ӯ", "ф", "х", "ҳ", "ч", "ш", "ъ", "э", "ю", "я"
);
Fonction simple pour trier un tableau par une clé spécifique. Maintient l'association d'index. Cette fonction trie également le tableau, mais pas dans mon alphabet, mais dans l'alphabet anglais (fonctionne mieux en lettres anglaises).
<?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
)
)
*/
?>
Une autre tri variant en valeur:
<?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
)
*/
>
Mon tableau exemple pour le tri:
<?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] => ҷаҳонишиносӣ
);
?>
Ce résultat ne tri par mon aplphabet du tableau:
<?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] => ҳурматой
)
*/
?>
Vous utilisez le retour "1" quand je l'utilise @trincot. Avez-vous vérifié la fonction pour la performance? Si oui, donnez-moi un lien pour que je puisse le regarder. – John
La fonction renvoie 'true', tout comme la fonction standard' sort'. Le tableau passé en argument est * muté * par la fonction, et sortira trié. C'est le comportement standard des fonctions de tri en PHP. La performance devrait être bonne, mais ne peut pas battre les méthodes de tri basées sur les paramètres régionaux intégrés en PHP. La fonction prend-elle trop de temps pour vous? – trincot
J'ai array avec 9000000 valeurs et la fonction est légèrement retardée et cette fonction peut être un peu plus rapide? – John