Естественная сортировка массива PHP по обратным и несохраняющим ключам - PullRequest
5 голосов
/ 23 марта 2012

Я смотрю, чтобы естественно отсортировать массив в обратном порядке и не сохранять ключи. Например, я хотел бы этот массив:

[0] => 1-string
[1] => 2-string
[2] => 10-string
[3] => 4-srting
[4] => 3-srting

Чтобы закончить так:

[0] => 10-srting
[1] => 4-string
[2] => 3-string
[3] => 2-string
[4] => 1-string

Я близко подошел к usort ($ array, 'strnatcmp'); но это не в обратном порядке. array_reverse () после не помогает.

Есть идеи?

Ответы [ 7 ]

6 голосов
/ 23 марта 2012

Я немного озадачен тем, что "array_reverse () после того, как не поможет". потому что

<?php
echo PHP_VERSION, "\n";

$x = array( 
    '1-string',
    '2-string',
    '10-string',
    '4-srting',
    '3-srting'
);

natsort($x);
$x = array_reverse($x, false);
print_r($x);

печать

5.3.8
Array
(
    [0] => 10-string
    [1] => 4-srting
    [2] => 3-srting
    [3] => 2-string
    [4] => 1-string
)

на моей машине

5 голосов
/ 23 марта 2012

Используйте атрибут $preserveKeys array_reverse() для сброса ключей, а также для обращения массива после natcasesort().

function rnatcasesort(&$array) {
    natcasesort($array);
    $array = array_reverse($array, false);
}

$values = array('1-string', '2-string', '10-string', '4-string', '3-string');

rnatcasesort($values);

var_dump($values);

/*
array(5) {
  [0]=>
  string(9) "10-string"
  [1]=>
  string(8) "4-string"
  [2]=>
  string(8) "3-string"
  [3]=>
  string(8) "2-string"
  [4]=>
  string(8) "1-string"
}
*/

2 голосов
/ 23 марта 2012

Используйте rsort () с флагом SORT_NATURAL.

rsort($array, SORT_NATURAL);

SORT_NATURAL было введено в PHP 5.4. Если у вас более низкая версия, используйте версию array_reverse (natsort ()).

0 голосов
/ 25 мая 2018

используйте эту функцию, чтобы сначала выполнить естественную сортировку, а затем с помощью array_reverse сделать ее в порядке убывания

    function natrsort($array)
    {
      natsort($array);
      return array_reverse($array);
    }
    natrsort($array); 
0 голосов
/ 23 марта 2012

Это работает:

$array = array('1-string', '2-string', '10-string', '4-string', '3-string');
natsort($array);
$array = array_reverse($array);
print_r($array);
0 голосов
/ 23 марта 2012

Вы могли бы сделать

<?php
$arr  = array("1-string", "2-string", "10-string","4-srting", "3-srting");

function sort_reverse($a, $b){
  $a = (int)$a;
  $b = (int)$b;
  if ($a > $b){
    return -1;
  }
  if ($a < $b){
    return 1;
  }
   return 0;
}
usort($arr, "sort_reverse");
var_dump($arr);

пэд здесь http://codepad.org/6dn81S3f

0 голосов
/ 23 марта 2012

Не rsort($array) не соответствует вашим потребностям?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...