如何使用数组中指定的字母有效地对数组进行排序,以最大限度地减少浪费时间。
$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
)
*/
&GT;
我的排序示例数组:
<?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] => ҳурматой
)
*/
?>
答案 0 :(得分:3)
您可以使用此函数按任何字符顺序对数组值进行排序,您需要将其作为第二个参数提供:
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 (
'адолат',
'ғайрат',
'забони тоҷикӣ',
'карим',
'маъруфҷон',
'рустам',
'тоҷикӣ',
'ӯктамҷон',
'ҳурматой',
)
答案 1 :(得分:1)
您可以将sort function与第二个参数一起使用,因为您希望字符串不是英文排序。一个例子可能是
setlocale("LC_ALL", "fr_FR.utf8");
sort($arraytobesorted, SORT_LOCALE_STRING);
您可以根据自己的语言进行更改,我以法语为例。