很难解释,所以这里是一个例子:
$strings = array(
array("languageCode" => "ES", "string" => "hola"),
array("languageCode" => "EN", "string" => "hello"),
array("languageCode" => "IT", "string" => "ciao"),
array("languageCode" => "CHS", "string" => "您好"),
);
我想通过定义顺序按 languageCode
值对字符串进行排序:
function magicStringOrder(array $strings, array $languageCodeOrder){
// ....
return $strings;
}
$strings = magicStringOrder($strings, array('EN', 'IT') );
$strings = array(
array("languageCode" => "EN", "string" => "hello"),
array("languageCode" => "IT", "string" => "ciao"),
array("languageCode" => "ES", "string" => "hola"),
array("languageCode" => "CHS", "string" => "您好"),
);
有magicStringOrder
吗?
我现在知道这是一个简单的问题,只需几个循环即可解决。我需要一个非常快的函数(它被调用很多次,使用大数组)
最佳答案
另一个没有 PHP 排序功能的想法:
// sort by cmp $arr[$magic_key] <-> arr $magic_order
function magicSort($arr, $magic_key="", $magic_order = array())
{
$sorted = array();
foreach($magic_order AS $v) {
foreach($arr AS $k2 => $v2) {
if($v===$v2[$magic_key]) {
$sorted[] = $v2;
unset($arr[$k2]);
}
}
}
// attach what's left
return array_merge($sorted, $arr);
}
Test it at eval.in (链接即将过期)
$strings = array(
array("languageCode" => "ES", "string" => "hola"),
array("languageCode" => "EN", "string" => "hello"),
array("languageCode" => "IT", "string" => "ciao"),
array("languageCode" => "CHS", "string" => "??"),
);
print_r(magicSort($strings, "languageCode", array("EN", "IT")));
输出到:
Array
(
[0] => Array
(
[languageCode] => EN
[string] => hello
)
[1] => Array
(
[languageCode] => IT
[string] => ciao
)
[2] => Array
(
[languageCode] => ES
[string] => hola
)
[3] => Array
(
[languageCode] => CHS
[string] => 您好
)
)
$magic_order
也可以为空。如果是这样,则仅重新索引该数组。 $magic_order
中不存在的值数组会下移并保持其顺序。
不确定,这是否正是您所需要的。
关于php - 如何在 PHP 中按键值对关联数组的数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28393349/