我正试图破解一个下拉菜单,从一系列国家/地区提取信息,以便美国' (id 1)显示在顶部,而其他所有国家/地区按字母顺序排序。如何使用usort函数对数组中的所有EXCEPT美国进行排序?我们也欢迎任何其他建议。这是代码:
while (list($key, $value) = each($countries->countries)) {
$countries_array[] = array('id' => $key, 'text' => $value['countryname']);
}
function text_cmp($a, $b) {
return strcmp($a["text"], $b["text"]);
}
usort($countries_array, 'text_cmp');
答案 0 :(得分:1)
最简单的方法是删除单个值,排序然后重新添加它:
// your countries array goes here:
$countries = array(2=>"Burma", 4=>"Zimbabwe", 10=>"France", 1=>"United States", 13=>"Russia");
$AmericaFKYeah = array(1=>"United States");
$countries =array_diff($countries, $AmericaFKYeah);
asort($countries);
// using + instead of array_unshift() preserves numerical keys!
$countries= $AmericaFKYeah + $countries;
给你:
array(5) {
[1]=>
string(13) "United States"
[2]=>
string(5) "Burma"
[10]=>
string(6) "France"
[13]=>
string(6) "Russia"
[4]=>
string(8) "Zimbabwe"
}
答案 1 :(得分:1)
<强>步骤强>
<强>代码强>
if (in_array('yourResource', $a_array)){
unset($a_array[array_search('yourResource',$a_array)]);
array_unshift($a_array, 'yourResource');
}
$yourResorceToFind = 'yourResource';
foreach ($a_arrays as $a_sub_array){
if (in_array($yourResorceToFind, $a_sub_array)){
unset($a_arrays[array_search($yourResorceToFind,$a_sub_array)]);
array_unshift($a_arrays, $a_sub_array);
break;
}
}
答案 2 :(得分:0)
我发现这个主题试图以丑陋的方式做同样的事情,但是由于我的技术看起来更简单,所以如果有人需要,我可以分享它。
最简单的方法是摆弄usort回调的结果。您只需要像这样在回调中首先传递想要的值即可:
$countries = [
['id' => 2, 'text' => 'Burma'],
['id' => 4, 'text' => 'Zimbabwe'],
['id' => 10, 'text' => 'France'],
['id' => 1, 'text' => 'United States'],
['id' => 13, 'text' => 'Russia'],
];
$myFirstItem = "United States";
usort($countries, function($a, $b) use ($myFirstItem) {
return $myFirstItem == $a['text'] ? -1 : ($myFirstItem == $b['text'] ? 1 : strcmp($a['text'], $b['text']));
});
这有点丑陋,但不需要其他数组就可以完成工作,并且一切都在回调中完成了。