private static function clasificar($banco, $x, $y, $z, $k)
 {
     $clase = 0;
     for ($i = 0; $i < sizeof($banco); $i++) {
         $d[$i] = KNN::distancia($x, $banco[$i][0], $y, $banco[$i][1], $z, $banco[$i][2], $banco[$i][3]);
     }
     $clases = array();
     $distancias = array();
     // Obtener una lista de columnas
     foreach ($d as $clave => $fila) {
         $distancias[$clave] = $fila['distancia'];
         $clases[$clave] = $fila['clase'];
     }
     // Ordenar los datos con volumen descendiente, edición ascendiente
     // Agregar $d como el último parámetro, para ordenar por la clave común
     array_multisort($distancias, SORT_ASC, $clases, SORT_ASC, $d);
     $knnDataSet = array();
     for ($i = 0; $i < $k; $i++) {
         $knnDataSet[$i] = $clases[$i];
     }
     $knn = array_count_values($knnDataSet);
     $clasesKnn = array();
     $insidencias = array();
     $i = 0;
     foreach ($knn as $key => $value) {
         $clasesKnn[$i] = $key;
         $insidencias[$i++] = $value;
     }
     // Ordenar los datos con volumen descendiente, edición ascendiente
     // Agregar $d como el último parámetro, para ordenar por la clave común
     array_multisort($insidencias, SORT_DESC, $clasesKnn, SORT_ASC, $knn);
     $clase = $clasesKnn[0];
     return $clase;
 }
<?php

/**
 * Obtiene todas las metas de la base de datos
 */
require 'KNN.php';
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    // Manejar petición GET
    if (isset($_GET['x']) && isset($_GET['y']) && isset($_GET['z']) && isset($_GET['k'])) {
        // Obtener parámetros
        $x = $_GET['x'];
        $y = $_GET['y'];
        $z = $_GET['z'];
        $k = $_GET['k'];
        // Tratar retorno
        $retorno = KNN::calcularClase($x, $y, $z, $k);
    }
    if ($retorno) {
        $datos["estado"] = 1;
        $datos["clase"] = $retorno;
        print json_encode($datos);
    } else {
        print json_encode(array("estado" => 2, "mensaje" => "Ha ocurrido un error"));
    }
}