Search the Community
Showing results for tags 'meklēšanas algoritms'.
-
Esmu uzrakstījis funkciju, kura izveido dropdown tipa izvēlni. Vērtības tiek ņemtas no datubāzes. Šo sarakstu ir iespējams papildināt ar neierobežotu skaitu vērtībām, tam arī ir attiecīga forma, vienīgie nosacījumi jaunu vērtību ieviešanai ir tādi, ka ievades laukos (ar javascript palīdzību ģenerēti form_input lauki) nedrīkst atrasties divi vienādi nosaukumi vai tie nedrīkst jau atrasties datubāzē. Ideja ir tāda, ka tiek paņemts pirmais (0) vārds un salīdzināts ar visiem pārējiem vārdiem ievades masīvā, ja to atrod vēl vismaz 1 reizi, tad funkcija atgriež false vērtību, ja ievadītajā masīvā meklētais vārds neatkārtojas, tad to meklē datubāzē, ja arī tur neatkārtojas to ieliek citā masīvā. Ja vārds kura dublikātu meklē ir ievadīts vēl vismaz 1 reizi, tad vārds jaunajā masīvā netiek saglabāts un pointeris pārbīdas par 1 pozīciju uz priekšu un sāk meklēt tādā pašā secībā jauno atbilstību. Mans kods: //$length1 = $post masīva garums //$length2 = DB esošā masīva garums //$num1 pointeris $post masīvam //$array1 = $post masīvs //array2 = DB esošais masīvs //masīvu noklusētās vērtības ir NULL, jo tie var būt tukši (tā vieglāk kļūdu noteikt) public function search_if_exists($length1, $length2, $num, &$array1 = NULL, &$array2 = NULL){ $error_post = 'Kļūda ar $post masīvu.'; $error_db = 'Kļūda ar datubāzes masīvu'; //Ja neizdodas iegūt $post masīvu nav jēga turpināt if($array1===NULL){return $error_post;} //Tiek veikta pārbaude $post masīvā esošo dublikātu noskaidrošanai for($length1; $num!=$length1; ){ if($array1['title'][$num]===$array1['title'][$length1]){ //Ja ir dublikāti neturpinam return true; }else{ //Ja nav pārbīdam pointeri par 1 pozīciju atpakaļ $post masīvam $length1-=1; } } //Ja neizdodas iegūt db esošo masīvu nav jēgas turpināt if($array2===NULL){ return $error_db; } //Tiek veikta pārbaude DB esošo ierakstu noskaidrošanai //(pēc noklusējuma vienmēr būs 1 ieraksts, ar kuru salīzināšana netiek veikta) elseif($length2<=1){ return false; }else{ //Līdzīgi kā pirmajā ciklā tiek veikta pārbaude no $post masīva vārdiem //datubāzē esošo dublikātu noskaidrošanai. Šajā pārbaudē jau tiek pašsaprotami //pieņemts fakts, ka netika ievadīti dublikāti for($length2; $num!=$length2; ){ if($array1['title'][$num]===$array2[$length2]['title']){ return true; }else{ $length2 -=1; if($num===$length2){ return false; } } } } } Brīdī, kad mēģinu izsaukt šo funkciju pārlūks atrodas 'loading' statusā, nav īsti saprotams pat kur kļūda iemetusies. Ja manai problēmai jau ir izdomāts risinājums lūdzu padalieties ar informāciju, vēlos to aplūkot, bet pa lielam gribās pašam izdomāt.