|
| 1 | +<?php |
| 2 | +namespace Uspdev; |
| 3 | + |
| 4 | +class Cutter |
| 5 | +{ |
| 6 | + public static function find($search) |
| 7 | + { |
| 8 | + $search = trim($search); |
| 9 | + $search = strtolower(Cutter::removeAccents($search)); |
| 10 | + |
| 11 | + // esta lista foi compilada a partir do endereço |
| 12 | + // http://203.241.185.12/asd/board/Author/upfile/abcd.htm visitado em 28/5/2019 |
| 13 | + $list = Cutter::load(__DIR__ . '/cutter.csv'); |
| 14 | + |
| 15 | + return Cutter::recursiveSearch($search, $list, 0); |
| 16 | + } |
| 17 | + |
| 18 | + protected static function removeAccents($string) |
| 19 | + { |
| 20 | + return preg_replace('/[`^~\'"]/', null, iconv('UTF-8', 'ASCII//TRANSLIT', $string)); |
| 21 | + } |
| 22 | + |
| 23 | + public static function load($file) |
| 24 | + { |
| 25 | + // $file está no formato 000;xxxx |
| 26 | + $csv = file_get_contents($file); |
| 27 | + |
| 28 | + //vamos remover as linhas que começam com # |
| 29 | + $csv = preg_replace('/#.*.\n/', '', $csv); |
| 30 | + |
| 31 | + $arr = array_map(function ($v) {return str_getcsv($v, ";");}, explode("\n", $csv)); // vamos converter para array |
| 32 | + return $arr; |
| 33 | + } |
| 34 | + |
| 35 | + // método interativo de busca do código cutter |
| 36 | + protected static function recursiveSearch($search, $list, $i) |
| 37 | + { |
| 38 | + $new_list = []; |
| 39 | + |
| 40 | + foreach ($list as $tuple) { |
| 41 | + |
| 42 | + $tuple[0] = (int) $tuple[0]; |
| 43 | + $tuple[1] = strtolower(trim($tuple[1])); |
| 44 | + |
| 45 | + if ($i >= strlen($search)) { |
| 46 | + return $list[0][0]; |
| 47 | + } |
| 48 | + |
| 49 | + if ($i > strlen($tuple[1])) { |
| 50 | + break; |
| 51 | + } |
| 52 | + |
| 53 | + // em alguns momentos $tuple[1][$i] (um caracter) pode não existir, pr isso testamos antes |
| 54 | + if (!empty($tuple[1][$i]) && $search[$i] == $tuple[1][$i]) { |
| 55 | + array_push($new_list, $tuple); |
| 56 | + } |
| 57 | + } |
| 58 | + |
| 59 | + if (!empty($new_list)) { |
| 60 | + return Cutter::recursiveSearch($search, $new_list, $i + 1); |
| 61 | + } else { |
| 62 | + return $list[0][0]; |
| 63 | + } |
| 64 | + } |
| 65 | +} |
0 commit comments