MKK_KozVezVal/interface.php

92 lines
2.3 KiB
PHP

<?php
define("DUPLICATE_NAME_IN_SAME_GROUP", true);
// kiolvassa a választható emberek listáját
function read_electable_people(string $fname): array
{
$s = file_get_contents($fname);
// szétszedés csoportnév-csoporttag sorozatra
$group_name_seq = preg_split("/(\*\*)|(__)/", trim($s), -1, PREG_SPLIT_NO_EMPTY);
// csoportok feldolgozása egyenként
$ep = [];
for ($i = 0; $i < count($group_name_seq); $i += 2) {
$group = trim($group_name_seq[$i]); // csoport kiolvasása
$names = preg_split("/(\n)|(\r\n)/", trim($group_name_seq[$i + 1]), -1, PREG_SPLIT_NO_EMPTY); // nevek a csoportból
foreach ($names as $name) {
if (trim($name) === "") { // üres sorokat átugorja
continue;
}
$new_rec = ["name" => $name, "group" => $group];
if (DUPLICATE_NAME_IN_SAME_GROUP || !in_array($new_rec, $ep)) {
$ep[] = $new_rec;
}
}
}
return $ep;
}
define("MINIMUM_NEEDLE_LENGTH", 3);
// keresés a nevek között
function search_in_names(array $records, string $needle): array
{
$needle = trim($needle);
if (strlen($needle) < MINIMUM_NEEDLE_LENGTH) {
return [];
}
$hitpos_array = [];
$filter = function(array $var) use (&$hitpos_array, $needle) : bool {
$hitpos = stripos($var["name"], $needle);
if ($hitpos != false) {
$hitpos_array[] = $hitpos;
}
return $hitpos !== false;
};
$filter_res = array_values(array_filter($records, $filter));
if (count($filter_res) > 0) {
for ($i = 0; $i < count($filter_res); $i++) {
$filter_res[$i]["hitpos"] = $hitpos_array[$i];
}
}
return $filter_res;
}
// --------------------------------
define("ELECTABLE_PEOPLE_DATABASE", "data/electable_people_test.md");
$action = json_decode($_POST["action"]) ?? "none";
$res = "";
switch ($action) {
case "search":
{
$needle = json_decode($_POST["needle"]);
$p = read_electable_people(ELECTABLE_PEOPLE_DATABASE);
$hits = search_in_names($p, $needle);
$res = $hits;
}
break;
case "none":
break;
}
echo json_encode($res);
//$p = read_electable_people("data/electable_people_test.md");
return;