2017-08-09 48 views
1

在PHP中,你可以做到这一点通过它们的大小命令字符串数组:PHP顺序排列,然后通过索引

usort($parts, function($a, $b) { 
    return strlen($b) - strlen($a); 
}); 

通过大小但如果两个如何订购的字符串数组字符串的大小相同,请在原始数组中排列它们的索引

如:

I a o delicious cake

变为:

delicious cake I a o

此刻与我当前的代码就变成:

delicious cake o a i

+0

检查我的回答如下。我希望这是你真正想要的@BarneyChambers –

回答

3

请使用此方法进行排序数组。

<?php 
$parts = "I a o delicious cake"; 
$parts = explode(" ",$parts); 
array_multisort(array_map('strlen', $parts),SORT_DESC, $parts); // this is for DESC order 
//array_multisort(array_map('strlen', $parts),SORT_ASC, $parts); // you can use this for ASC order 
echo "<pre>"; 
print_r($parts); //return like this "delicious cake I a o" 
?> 
+0

好和优雅,谢谢 –

+0

检查在PHP 7的O/P https:/ /3v4l.org/Ga1Pj –

+0

只是做了一些测试,实际上这个代码并没有产生正确的输出 –

-1

您可以使用uasort而不是usort

从文档:

uasort - 按与用户定义的比较函数的阵列和 保持索引关系

正常usort函数不这样做:

如果两个成员比较相等,他们的相对顺序我n排序的 数组未定义。

+0

对不起,我不认为这会工作,我需要它按长度排序,然后由数组索引 –

0

对于长度排序,然后指数你可以使用array_multisort像下面

<?php 

$str="I love to code"; 
$parts=explode(" ", $str); 

$keys = array_keys($parts); 
$values = array_values($parts); 

array_multisort(array_map('strlen', $values), SORT_ASC, $keys, SORT_ASC, $parts); 

$new_str = implode(" ", $parts); 
echo $new_str; 

演示:https://3v4l.org/BJ1Cl