PHP自定义排序:根据指定的键手动对数组进行排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP自定义排序:根据指定的键手动对数组进行排序相关的知识,希望对你有一定的参考价值。
我有一个看起来像的数组
$array = [
//...
'name' => ['value' => 'Raj KB'],
'street' => ['value' => 'Street ABC'],
'city' => ['value' => 'Dubai'],
'country_id' => ['value' => 'UAE'],
'region' => ['value' => 'DXB'],
'region_id' => ['value' => 11],
'zip_code' => ['value' => 12345],
'city_id' => ['value' => 22],
//...
];
我想对数组进行排序,以便键country_id
,region
,region_id
,city
,city_id
顺序出现。例如,最终输出应类似于
$array = [
//...
'name' => ['value' => 'Raj KB'],
'street' => ['value' => 'Street ABC'],
'country_id' => ['value' => 'UAE'],
'region' => ['value' => 'DXB'],
'region_id' => ['value' => 11],
'city' => ['value' => 'Dubai'],
'city_id' => ['value' => 22],
'zip_code' => ['value' => 12345],
//...
];
我尝试过:
审判#1
uksort($array, function ($a, $b)
$order = ['country_id' => 0, 'region' => 1, 'region_id' => 2, 'city' => 3, 'city_id' => 4];
if (isset($order[$a]) && isset($order[$b]))
return $order[$a] - $order[$b];
else
return 0;
);
var_dump($array);
Trial#2
uksort($array, function ($a, $b)
$order = ['country_id' => 0, 'region' => 1, 'region_id' => 2, 'city' => 3, 'city_id' => 4];
if (!isset($order[$a]) && !isset($order[$b]))
return 0;
elseif (!isset($order[$a]))
return 1;
elseif (!isset($order[$b]))
return -1;
else
return $order[$a] - $order[$b];
);
var_dump($array);
但是它没有按预期工作。
答案
您的实现非常接近,但是您必须在比较函数中考虑以下情况:仅存在您想要的一个键,而没有其他任何键。如果您在这种情况下return 0
,它们将在数组的其他键中变形(因为在这种情况下,它们的位置被认为是相等的。)
通过处理这两种特殊情况,可以对要彼此出现的键进行显式排序,您得到的结果将满足您的要求:
uksort($array, function ($a, $b) $order = ['country_id' => 1, 'region' => 2, 'region_id' => 3, 'city' => 4, 'city_id' => 5]; if (isset($order[$a]) && isset($order[$b])) return $order[$a] - $order[$b]; else if (isset($order[$a])) return 1; else if (isset($order[$b])) return -1; else return 0; );
输出:
array(8)
'zip_code' =>
array(1)
'value' =>
int(12345)
'street' =>
array(1)
'value' =>
string(10) "Street ABC"
'name' =>
array(1)
'value' =>
string(6) "Raj KB"
'country_id' =>
array(1)
'value' =>
string(3) "UAE"
'region' =>
array(1)
'value' =>
string(3) "DXB"
'region_id' =>
array(1)
'value' =>
int(11)
'city' =>
array(1)
'value' =>
string(5) "Dubai"
'city_id' =>
array(1)
'value' =>
int(22)
以上是关于PHP自定义排序:根据指定的键手动对数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章