真的很开心。我很好奇最好的方法。
答案 0 :(得分:3)
这是一种方法(最有可能是更好的解决方案):
function sort_length($str1, $str2)
{
if(strlen($str1) == strlen($str2))
{
return 0;
}
return strlen($str1) > strlen($str2) ? -1 : 1;
}
$words = array("Hello", "World", "this", "is", "a", "test");
usort($words, 'sort_length');
$new_list = array();
$boolean = true;
foreach($words as $word)
{
if($boolean)
{
array_push($new_list, $word);
}
else
{
array_unshift($new_list, $word);
}
$boolean = !$boolean;
}
//print_r($new_list);
答案 1 :(得分:2)
我会做以下事情:
答案 2 :(得分:1)
这是一个保留数组键的解决方案:
// function to compare two strings by their length
function cmp_strlen($a, $b) {
return strlen($a) - strlen($b);
}
// sort array by length while preserving the keys
uasort($arr, 'cmp_strlen');
$ordered = array();
$keys = array_keys($arr);
// fill $ordered with odd keys in order
for ($i=0, $n=count($keys); $i<$n; $i+=2) {
$ordered[$keys[$i]] = $arr[$keys[$i]];
}
// fill $ordered with even keys in reverse order
for ($i=((count($keys)>>1)<<1)-1; $i>0; $i-=2) {
$ordered[$keys[$i]] = $arr[$keys[$i]];
}
答案 3 :(得分:0)
首次尝试可能是首先将它们排序为正常。然后迭代遍历此数组,复制到新数组,复制目标在新数组的开始和结束之间交替,其中开始索引递增,结束索引递减。