【问题标题】:sort data by the largest and smallest variables in php?按php中的最大和最小变量对数据进行排序?
【发布时间】:2020-03-24 03:12:01
【问题描述】:

我编写了代码根据最小欧几里得值和最大相似度对数据进行排序,数据首先根据最小欧几里德值排序,如果有一个具有最小欧几里德值的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>";
}

以上代码的输出结果如下:

但是为什么输出仍然按欧几里得排序,我的代码有什么问题? 顺序应该是K04、K03、K02、K01。

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    您按欧几里得距离排序,但忘记添加 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

    【讨论】:

      【解决方案2】:

      希望对你有帮助...

      $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>";
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-13
        • 2016-07-14
        • 1970-01-01
        • 2017-08-01
        • 1970-01-01
        • 2022-11-04
        • 2021-12-08
        • 2016-12-15
        相关资源
        最近更新 更多