使用rsort();下降数字

时间:2018-09-18 13:25:17

标签: php

我有以下数字序列。

$str = '11 10 9 8 7 6 5 4 3 2 1 13 12';

如何将以上部分变成这个。

13 12 11 10 9 8 7 6 5 4 3 2 1

我一直在搞弄这个。

$str = $numbers; 
$stringParts = str_split($str);
rsort($stringParts);

但是上面仅在爆炸时返回此值。

11 10 9 8 7 6 5 4 3 2 1 31 21

这是我收集数字的方式。

$categories = get_the_category();
$category_id = $categories[0]->cat_ID;              
$catquery = new WP_Query( 'cat='.$category_id.'&posts_per_page=-1000' ); 
while($catquery->have_posts()) : $catquery->the_post();
$numbers = strip_tags( get_the_term_list( get_the_ID(), 'SECONDID', '', ', ', '' ) ); 


$str = $numbers; 
$stringParts = str_split($str);
rsort($stringParts);
echo implode('', $stringParts);

这是从WordPress自定义分类字段中随机抽取数字,而不仅仅是放置在字符串中。

因为人们不愿意相信而对屏幕截图进行编辑。

enter image description here

3 个答案:

答案 0 :(得分:1)

这段代码将解决您的问题:

$str = '11 10 9 8 7 6 5 4 3 2 1 13 12';
$nums_arr = explode(' ',$str);
rsort($nums_arr);
$new_str = implode(" ",$nums_arr);

echo $new_str;

答案 1 :(得分:1)

正如评论中指出的那样,您发布的示例的实际结果将是这样:

  

98765433221111110

这是因为str_split将字符串分成相等大小的部分,默认为1个字符。因此str_split('11 10 9 8 7 6 5 4 3 2 1 13 12')的结果是28个单字符字符串的数组。对这些内容进行排序将把所有的9放在首位,然后是8等等,并在最后加上所有空格。

您真正想做的是使用explode函数在空间上分割字符串:

$str = $numbers; 
$stringParts = explode($str, ' ');
rsort($stringParts);

这为您提供了一个由13个字符串组成的数组,每个字符串一个或两个字符长。然后对它们进行排序即可得到所需的结果,因为PHP会正确地猜测您希望将它们解释为数字。

答案 2 :(得分:-2)

由于这是一个非常简短的系列,因此请使用冒泡排序算法。它被广泛记录,例如:https://www.geeksforgeeks.org/bubble-sort/

如果要将排序顺序从升序更改为降序,请将>布尔运算符更改为<。

还有一件事:如果您的序列组成一个字符串,则首先将其转换为数组:这将使示例中的算法更易于理解。