Сортировать массив с наивысшей точкой? - PullRequest
1 голос
/ 17 мая 2011

Как отсортировать массив с наивысшей точкой из ключа 15.00?

У меня есть массив, который выглядит следующим образом:

Array
(

    [9] => Array
        (
            [15.00] => 3.0
            [20.00] => 8.0
            [25.00] => 10.5
        )

    [2] => Array
        (
            [15.00] => 2.0
            [20.00] => 5.0
            [25.00] => 2.5
        )


    [4] => Array
        (
            [15.00] => 6.0
            [25.00] => 4.0
            [30.00] => 6.0
        )
)

Для того, чтобы оно было: 4, 9и 2

Ответы [ 4 ]

2 голосов
/ 17 мая 2011

PHP имеет usort, функцию, позволяющую вам сортировать с помощью предоставленной пользователем функции сравнения.Также есть uasort, который поддерживает связь с индексом.

Вот пример:

<?php
$array = Array(
  9 => Array(
            15.00 => 3.0,
            20.00 => 8.0,
            25.00 => 10.5
  ),
  2 => Array(
            15.00 => 2.0,
            20.00 => 5.0,
            25.00 => 2.5
  ),
  4 => Array(
            15.00 => 6.0,
            25.00 => 4.0,
            30.00 => 6.0
  )
);

function my_func($a, $b) {
   if ($a[15.00] == $b[15.00])
      return 0;
   return ($a[15.00] < $b[15.00]) ? 1 : -1; // backwards sorting
}

uasort($array, my_func);
var_dump($array);
?>

И вот оно работает .

Надеюсь, это поможет.

2 голосов
/ 17 мая 2011

Вы хотите uasort ():

function cmp($a, $b) {
  if ($a[15.00] < $b[15.00]) return 1;
  if ($a[15.00] > $b[15.00]) return -1;
  return 0;
}

uasort($data, "cmp");
2 голосов
/ 17 мая 2011

Если я правильно понимаю ваш вопрос, я бы лично использовал usort () . В моем обратном вызове я бы сравнил $a[15.00] и $b[15.00].

0 голосов
/ 17 мая 2011
<?
for ($i=1;$i<=count($arr);$i++)
for ($j=$i+1;$j<=count($arr) - 1;$j++)
 if ($arr[$i]['15.00'] > $arr[$j]['15.00']) {
   $tmp = $arr[$i];
   $arr[$i] = $arr[$j];
   $arr[$j] = $tmp
 }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...