PHP script

Programovacie jazyky, rady, poradňa...
TGiJack
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 419
Registrovaný: 30 nov 2006, 19:37
Bydlisko: NO
Kontaktovať používateľa:

PHP script

Príspevok od používateľa TGiJack »

neviete ako by mal vyzeraz script ktory by hladal pismena v slove

napr: z dat. slov by vybral ALL ktore sa zacinaju na B a na 3 mieste maju O (BlOmba,BiOlit,..atd) samozrejme miesto pismen aj typ sa meni
som to skušal cez for..count ale moc mi to nešlo :( poradte prosim
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Kód: Vybrať všetko

$vstup = array("BlOmba","BiOlit","test","blomba");
$regular = "/^B+[a-z]{1}+O+[a-z]/";
foreach($vstup as $value) if (preg_match($regular,$value)) echo $value . "<br />";
neviem čo si myslel tým "písmeno aj typ sa mení", ale ten regulárny tiež celkom ľahko vyskladáš aj dynamicky
TGiJack
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 419
Registrovaný: 30 nov 2006, 19:37
Bydlisko: NO
Kontaktovať používateľa:

Príspevok od používateľa TGiJack »

no takto som to myslel mas prakticky 2 vstupy jeden kde je straaasne vela slov a druhý vstup s pismenami na nejakých poziciach ..predstav si to asi takto:

POLE SLOV: mama,dom,auto,konik,....
a teraz ešte mas druhu premennu ktora zas obsahuje lubovolne pismeno a na akej pozicii sa ma v danom slove nachadzat : o-2

tak a ta funkcia by mi mala vratit slova >dom,konik ale musi to byt všeobecne pre akékolvek pismeno a jeho poziciu v slove
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

tak to dáš do funkcie:

Kód: Vybrať všetko

function hladaj($vstupne_pole,$pismeno,$pozicia){
	$vystup = array();
	$regular = "/^[A-Z,a-z]{".floor($pozicia-1) ."}+".$pismeno."+[A-Z,a-z]/";
	foreach($vstupne_pole as $value) if (preg_match($regular,$value)) $vystup[] = $value;
	return $vystup;
}
použitie:

Kód: Vybrať všetko

$vstup = array("BlOmba","BiOlit","test","blomba");
var_dump(hladaj($vstup,"O",3));
mohol by si to ešte rozšíriť o ďalší parameter, či má hladať case-sensitive alebo nie
TGiJack
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 419
Registrovaný: 30 nov 2006, 19:37
Bydlisko: NO
Kontaktovať používateľa:

Príspevok od používateľa TGiJack »

dik :) idem to poskušat

//autoeditácia príspevku ( 04 May 2009, 22:51 )

Kód: Vybrať všetko

<?php
require_once ('pripojenie.php');

function hladaj($vstupne_pole,$pismeno,$pozicia){ 
   $vystup = array(); 
   $regular = "/^[A-Z,a-z]{".floor($pozicia-1) ."}+".$pismeno."+[A-Z,a-z]/"; 
   foreach($vstupne_pole as $value) if (preg_match($regular,$value)) $vystup[] = $value; 
   return $vystup; 
}
$my=5;
$moznost = mysql_query("SELECT * FROM `kr_data` HAVING `kr_data`.`z` <= '$my' ORDER BY `kr_data`.`otazka` ASC");
while ($r = mysql_fetch_array($moznost)) {
	$vstup[] = $r[odpoved]; 
	}
	
$pis = array(1 => "A","","L","","");
$vystup = hladaj($vstup,$pis[1],1);

for ($i=2; $i<=5; $i++){
	if ($pis[i] <> "") {
		$vystup = hladaj($vstup,$pis[$i],$i);
		$vstup = $vystup;
	}		
}
for ($y=0; $y<=30; $y++){
echo $y.'.'.$vystup[$y].'<br/>';
}
?>

nevies kde je chyba skušal som to spravit aby mi to hladalo viacej pismen ale nechce to už ist.. prvy krat mi pretriedy velku DB a potm z nej znova ma vybrat už iba tie ktore dalej zodpovedaju premennej $pis[$i]
a na konci by to malo vypisat už len slova ktote maju na začiatku A a na 3 mieste L ale nejde to :( už som to hocijako kombynoval :cry:
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

1) riadok

Kód: Vybrať všetko

$vystup = hladaj($vstup,$pis[1],1);
je zbytočný ak za ním nedáš ešte $vstup = $vystup lebo do ďalšieho hladania dávaš $vstup a nie už preriedený $vystup

2) textové porovnávanie je pomocou != čiže riadok

Kód: Vybrať všetko

if ($pis[i] <> "") { 
bude namiesto <> obsahovať != (pôjde ti to aj s <> ale tak treba dodržiavať aj nepísané pravidlá :) )
Takisto v tomto riadku ti chýba znak dolára: if ($pis[$i] <> "") {
TGiJack
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 419
Registrovaný: 30 nov 2006, 19:37
Bydlisko: NO
Kontaktovať používateľa:

Príspevok od používateľa TGiJack »

dik už to frči ..en riadok som tam ja mechanicky dopisal že či to vôbec ide ..tu chybu som si nevšimol preto mi to nešlo supeer diik .. a tiež vdaka za niečo nove budem to už dodržiavat

Este niečo by som potreboval vieš ked mam tu pis premennu

Kód: Vybrať všetko

$pis = array(1 => "A","","A","",""); 

tak mi to uchyli aj slova ako AV,AB,ANA proste kratke nevieš ako by sa to dalo vyriešit?tu by sa zišlo asi aj niečo pridat a testovat či je konec slova zrejme a ak hej a vyhovuje podmienke doteraz tak by ho asi malo uložit do konečnej vystopnej premennej ..neviem porad ak mas nejaký napad PLS
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

mne to ide v poriadku, možno máš chybu niekde inde. Môžeš ale tú funkciu upraviť takto a nemalo by to robiť:

Kód: Vybrať všetko

function hladaj($vstupne_pole,$pismeno,$pozicia){ 
   $vystup = array(); 
   global $pis;
   $regular = "/^[A-Z,a-z]{".floor($pozicia-1) ."}+".$pismeno."+[A-Z,a-z]/"; 
   foreach($vstupne_pole as $value) if (preg_match($regular,$value) && strlen($value)==count($pis)) $vystup[] = $value; 
   return $vystup; 
}
Napísať odpoveď