сортировать данные по наибольшим и наименьшим переменным в php? - PullRequest
0 голосов
/ 24 марта 2020

Я сделал код для сортировки данных на основе наименьшего евклидового значения и наибольшего сходства, данные сортируются в первую очередь на основе наименьшего евклидового значения, если есть ata, которая имеет наименьшее евклидово значение, то сортируется следующая по наибольшему сходству код выглядит следующим образом:

 $gg = [
      ["Kasus" => "K01", "Euclidean" => "4", "Similrity" => "0.6"],
      ["Kasus" => "K02", "Euclidean" => "3", "Similrity" => "0.7"],
      ["Kasus" => "K03", "Euclidean" => "1", "Similrity" => "0.8"],
      ["Kasus" => "K04", "Euclidean" => "1", "Similrity" => "0.9"],

    ];

function k_sort($k_a, $k_b) {
  return $k_a["Euclidean"] - $k_b["Euclidean"];
}

usort($gg, "k_sort");

foreach($gg as $ta) {
  echo "<br>";
    list($kasus, $euclidean, $similarity) = array_values($ta);
    echo $kasus."-".$euclidean."-".$similarity;
    echo "<br>";
}

результаты вывода из вышеприведенного кода следующие:

enter image description here

но почему вывод по-прежнему сортируется по евклидову, что не так с моим кодом? Последовательность должна быть K04, K03, K02, K01.

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Вы отсортировали по евклидову расстоянию, но забыли добавить расчет для Similrity. Итак, ваш usort() будет выглядеть ниже с spaceship operator, который доступен с PHP7. Если вы хотите обойтись без него, вы можете просто вычесть значения.

<?php

function k_sort($k_a, $k_b) {
  if($k_a["Euclidean"] - $k_b["Euclidean"] === 0) return $k_b['Similrity'] <=> $k_a['Similrity'];
  return $k_a["Euclidean"] <=> $k_b["Euclidean"];
}

Демо: https://3v4l.org/dSvql

0 голосов
/ 24 марта 2020

надеюсь, что это полезно ...

$gg = [
      ["Kasus" => "K01", "Euclidean" => "4", "Similrity" => "0.6"],
      ["Kasus" => "K02", "Euclidean" => "3", "Similrity" => "0.7"],
      ["Kasus" => "K03", "Euclidean" => "1", "Similrity" => "0.8"],
      ["Kasus" => "K04", "Euclidean" => "1", "Similrity" => "0.9"],
];

function k_sort($k_a, $k_b) {
  if($k_a["Euclidean"] - $k_b["Euclidean"] === 0) return $k_b['Similrity'] <=> $k_a['Similrity'];
  return $k_a["Euclidean"] <=> $k_b["Euclidean"];
}

usort($gg, "k_sort");

foreach($gg as $ta) {
  echo "<br>";
    list($kasus, $euclidean, $similarity) = array_values($ta);
    echo $kasus."-".$euclidean."-".$similarity;
    echo "<br>";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...