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