如何在PHP中按长度对字符串数组进行排序并保留其键?

4

这是一个字符串数组:

$arr=array('longstring','string','thelongeststring');

所以关键点是:

0=>'longstring'
1=>'string'
2=>'thelongeststring'

我希望按照字符串长度进行排序,从长到短排序,但不更改它们的键。

$arrSorted=array(**2**=>'thelongeststring', **0**=>'longstring', **1**=>'string');

我已经使用PHP工作2天,以下是我对这个情况有所帮助的已知知识:

...
    usort($twoDim, 'sorting');
}

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

我希望得到一个按字符串长度排序的数组,但是键名需要保持不变。另外,asort 可以按字母顺序对数组进行排序并保留键名。但是我不知道如何同时实现这两个功能...

请帮忙!

2个回答

4

...如何同时完成这两件事

你已经接近成功了。

usort + asort = uasort


4

使用 uasort:

uasort — 使用用户自定义的比较函数对数组进行排序,并保持索引关联性

usort 不保持索引关联性。

用法如下:

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

$arr = ['longstring', 'string', 'thelongeststring'];

uasort($arr, 'sortByLength');

print_r($arr);

eval.in演示

这将返回:

Array
(
    [2] => thelongeststring
    [0] => longstring
    [1] => string
)

1
这真的是一个更好的答案。说实话,我的只是一个提示。 - Don't Panic
1
还有一个需要记住的好提示是,文档中的每个排序函数都链接到相同的排序比较页面,这使得很容易找出你需要为特定问题使用哪种方法:http://be2.php.net/manual/en/array.sorting.php - Willem Renzema

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接