problem s razglobiavane na string
12 отговора
206 прегледа
problem s razglobiavane na string
1. ima tekstovo pole + submit, ot koeto usera podava dumi.
2. vsiaka edna podadena duma triabva da se vkara v masiv kato negov element
naprimer: word1 word2 word3
stava na:
$masiv[0] = 'word1'
$masiv[2] = 'word2'
$masiv[3] = 'word3'
kogato usera podade takova nesto: "word1 word2" word3, masiva izglejda taka:
stava na:
$masiv[0] = 'word1 word2'
$masiv[1] = 'word3'
do tuk e lesno :-)
Kogato, obache usera podade: "word1 word2" word3 word4
masiva triabva da stane takyv:
$masiv[0] = 'word1 word2'
$masiv[1] = 'word3'
$masiv[2] = 'word4'
i syotvetno: word1 "word2 word3" word4
masiva stava na:
$masiv[0] = 'word1'
$masiv[0] = 'word2 word3'
$masiv[0] = 'word4'
shte sym mnogo blagodaren, ako niakoi podskaje kak da razdelq taka dumite.
2. vsiaka edna podadena duma triabva da se vkara v masiv kato negov element
naprimer: word1 word2 word3
stava na:
$masiv[0] = 'word1'
$masiv[2] = 'word2'
$masiv[3] = 'word3'
kogato usera podade takova nesto: "word1 word2" word3, masiva izglejda taka:
stava na:
$masiv[0] = 'word1 word2'
$masiv[1] = 'word3'
do tuk e lesno :-)
Kogato, obache usera podade: "word1 word2" word3 word4
masiva triabva da stane takyv:
$masiv[0] = 'word1 word2'
$masiv[1] = 'word3'
$masiv[2] = 'word4'
i syotvetno: word1 "word2 word3" word4
masiva stava na:
$masiv[0] = 'word1'
$masiv[0] = 'word2 word3'
$masiv[0] = 'word4'
shte sym mnogo blagodaren, ako niakoi podskaje kak da razdelq taka dumite.
трябва ти френски ключ
<?
$str = "yeah \"boob mmooo\" yeah skdjhaksjdh kajshdkjas \"lak sdj lasd\" kjh";
preg_match_all("/(?:\"[^\"]*?\")|[^\s]+/", $str, $m);
echo "<pre>\n\n";
print_r($m);
?>
"Да живееш - значи да се променяш." - Анатол Франс
Редактирано от Dakota на
Re: трябва ти френски ключ
nesto ne stava. Az postnah i vyv free-to, no i tam nesto niama uspeh. eto do kade stgnamhme:
<?php
/*
$Masiv=Array();
//$SearchPattern='word1 word2 "word3 word4 word5" word6';
$Temp=split('"',str_replace(' "','"',$SearchPattern));
$Masiv=split(' ',$Temp[0]);
array_push($Masiv,$Temp[1]);
foreach (split(' ',$Temp[2]) as $Remaining)
array_push($Masiv,$Remaining);
*/
//$SearchPattern = "yeah \"boob mmooo\" yeah skdjhaksjdh kajshdkjas \"lak sdj lasd\" kjh";
preg_match_all("/(?:\"[^\"]*?\")|[^\s]+/", $SearchPattern, $m);
echo "<pre>\n\n";
print_r($m);
//vizualizacia
for($i=0;$i<count($Masiv);$i++)
{
echo('$Masiv['.$i.'] = '.$Masiv[$i]."
");
}
?>
<form>
<input type="text" name="SearchPattern"><input type="submit">
</form>
kakto vijdash, 2 varianta sa, samo razkomentirai....
Ideiata e takava:
Tova triabva da e tyrsachka, koiato da pozvoliava na usera da podava stringove ot roda:
maratonki adidas "zelen model 45" obuwki Bylgaria
za da si napravia normalen SQL ot vsichko tfa, triabva da razbia stringa na chasti. Niakoi ima li ideia kak?
10x predvaritelno... :-)))
<?php
/*
$Masiv=Array();
//$SearchPattern='word1 word2 "word3 word4 word5" word6';
$Temp=split('"',str_replace(' "','"',$SearchPattern));
$Masiv=split(' ',$Temp[0]);
array_push($Masiv,$Temp[1]);
foreach (split(' ',$Temp[2]) as $Remaining)
array_push($Masiv,$Remaining);
*/
//$SearchPattern = "yeah \"boob mmooo\" yeah skdjhaksjdh kajshdkjas \"lak sdj lasd\" kjh";
preg_match_all("/(?:\"[^\"]*?\")|[^\s]+/", $SearchPattern, $m);
echo "<pre>\n\n";
print_r($m);
//vizualizacia
for($i=0;$i<count($Masiv);$i++)
{
echo('$Masiv['.$i.'] = '.$Masiv[$i]."
");
}
?>
<form>
<input type="text" name="SearchPattern"><input type="submit">
</form>
kakto vijdash, 2 varianta sa, samo razkomentirai....
Ideiata e takava:
Tova triabva da e tyrsachka, koiato da pozvoliava na usera da podava stringove ot roda:
maratonki adidas "zelen model 45" obuwki Bylgaria
za da si napravia normalen SQL ot vsichko tfa, triabva da razbia stringa na chasti. Niakoi ima li ideia kak?
10x predvaritelno... :-)))
Re: трябва ти френски ключ
Имаш и друг вариант, класически, без regexp(въпреки, че с regexp би трябвло да стане). Правиш един цикъл по дължината на низа. Когато попаднеш на разделител (интервал например) запомняш позицията, и така до следващия разделител, и после *заградения низ* от 2та разделителя го добавяш в масива. Ако попаднеш на кавичка, казваш, аха т'ва е от ония
(запазваш си позицията) и чакаш "затварящата" кавичка. Въпросния отрязък -> в масива. Отделно можеш да си проверяваш дали израза е верен, т.е да нямаш незатворени кавички. Може да е банално... но ако върши работа
и си зациклил...
If you don't care where you are going any road will get you there
If you don't care where you are going any road will get you there
Re: трябва ти френски ключ
Е как така не става?!
При мен си работи чудесно...я пробвай пак.
"Да живееш - значи да се променяш." - Анатол Франс
При мен си работи чудесно...я пробвай пак.
"Да живееш - значи да се променяш." - Анатол Франс
Re: трябва ти френски ключ
10x, ste opitam i taka. Dori obestavam da postana, ako uspeia :-)
Re: трябва ти френски ключ
emi az za da ne zadrystvam i tuka, predlagam koit se interesuva ot cialata taia rabota da pogledne na :
[линк]
tam kato che li nestata sa na pyt da se opraviat :-) :-) :-)
[линк]
tam kato che li nestata sa na pyt da se opraviat :-) :-) :-)
Re: трябва ти френски ключ
И какво получаваш като изход от това, което ти пратих?
"Да живееш - значи да се променяш." - Анатол Франс
"Да живееш - значи да се променяш." - Анатол Франс
Re: трябва ти френски ключ
e dobre....
eto do kyde ia dokarahme:
Tablica v mysql-a:
#
# Структура на таблица `tablica`
#
DROP TABLE IF EXISTS tablica;
CREATE TABLE tablica (
id int(11) NOT NULL auto_increment,
text text NOT NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;
INSERT INTO tablica VALUES (1, 'Тук-там вече отлично осъзнаваха това. Не го разбираха за съжаление само така наречените "призвани". По-специално Людендорф, тогава полковник на големия генерален щаб, сметна за свой дълг да посочи тези слабости в специална докладна записка, предадена от него през 1912 г.; но разбира се, нашите "държавни мъже" не обърнаха ни най-малко внимание на документа. Трезвото разбиране на такива прости неща е типично само за нас, обикновените смъртни; що се касае до господата "дипломати", то те по принцип са неспособни да ги разберат.\r\nЗа Германия беше щастлива случайност, че войната от 1914 г. беше избухнала поради конфликта, в който Австрия беше пряко намесена, така че на Хабсбургите не им оставаше нищо друго, освен да се включат в нея. Ако събитията се бяха развили по друг начин, Германия може би щеше да остане сама. Хабсбургската държава никога нямаше да пожелае, а и не можеше да приеме да участва във война, избухнала непосредствено заради Германия. Това, за което по-късно така жестоко осъждаха Италия, сигурно още по-рано би се случило с Австрия. Австрия би останала "неутрална" и по такъв начин щеше да се опита да се предпази от избухване на революция в навечерието на войната. При такава обстановка австрийското славянство би предпочело още през 1914 година да отхвърли набързо\r\nмонархията, отколкото да допусне Австрия да воюва заради Германия. Но малцина разбираха тогава опасностите и излишните трудности, които Германия си създаваше благодарение на съюзническата политика с Австрия.');
INSERT INTO tablica VALUES (2, 'Достатъчен беше фактът, че Австрия имаше прекалено много врагове, които мечтаеха само за това, колкото се може по-скоро да получат наследството от умиращата хабсбургска държава. Съвсем ясно беше, че след време срещу Германия щеше да се натрупа омраза за това, че в нея виждаха причината, забавяща разпадането на австрийската монархия, разпадане, което всички очакваха с нетърпение с единствената надежда да получат дял от наследството. В края на краищата, всички стигаха до извода, че до виенското наследство могат д се докопат, само ако си разчистят сметките с Берлин. Това беше първо.');
tova e php-to, koeto veroiatno e nai-blizko do celta:
$Masiv=Array();
$Temp=split('"',str_replace(' "','"',$SearchPattern));
$Masiv=split(' ',trim($Temp[0]));
array_push($Masiv,trim($Temp[1]));
foreach (split(' ',trim($Temp[2])) as $Remaining) {
array_push($Masiv,$Remaining);
} // foreach
$Query = "SELECT * FROM `tablica` WHERE ";
foreach ($Masiv as $SearchElement) {
if ($SearchElement!="") $Query.="`text` like '%".$SearchElement."%' AND ";
} // foreach
$Query = substr($Query,0,strlen($Query)-4).";";
if (Substr($Query,-3)=="WH;") {
echo "No Search Pattern Defined.";
} else {
// Primeren SQL (Zameni ECHO s mysql_query()) - Vseki element ot SearchPattern triabva da e v poleto na bazata danni
// Ako iska6 da vrashta rezultat za koia da e duma, zameni AND s OR v $Query
echo $Query;
}
Kogato probvah da zapisha v txt-poleto slednoto nesto:
"отлично осъзнаваха" "Не го разбираха" съжаление само
Znachi ideiata e takava, che prez tekstovoto pole usera moje da podade kakvoto mu dusha iska, a scripta triabva da sglobi podhodiashta sql zaiavka.
Naprimer usera moje da podade
"duma1 duma1 duma1" duma1 "duma1 duma1" duma1 duma1
i vsiakakvi podobni kombinacii. Otdelno e, che moje da pishe + ili -, ama tiah sha gi mislia posle. Prosto niama kak da razglobia stringa na tyrsenite dumi/izraзи. Веоиатно ще стане, но по много брутален начин - а именно: предлойениа по - горе :
намирам символ (интервал или кавичка) и запомниам позицията на вс един от тях и така.....
eto do kyde ia dokarahme:
Tablica v mysql-a:
#
# Структура на таблица `tablica`
#
DROP TABLE IF EXISTS tablica;
CREATE TABLE tablica (
id int(11) NOT NULL auto_increment,
text text NOT NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;
INSERT INTO tablica VALUES (1, 'Тук-там вече отлично осъзнаваха това. Не го разбираха за съжаление само така наречените "призвани". По-специално Людендорф, тогава полковник на големия генерален щаб, сметна за свой дълг да посочи тези слабости в специална докладна записка, предадена от него през 1912 г.; но разбира се, нашите "държавни мъже" не обърнаха ни най-малко внимание на документа. Трезвото разбиране на такива прости неща е типично само за нас, обикновените смъртни; що се касае до господата "дипломати", то те по принцип са неспособни да ги разберат.\r\nЗа Германия беше щастлива случайност, че войната от 1914 г. беше избухнала поради конфликта, в който Австрия беше пряко намесена, така че на Хабсбургите не им оставаше нищо друго, освен да се включат в нея. Ако събитията се бяха развили по друг начин, Германия може би щеше да остане сама. Хабсбургската държава никога нямаше да пожелае, а и не можеше да приеме да участва във война, избухнала непосредствено заради Германия. Това, за което по-късно така жестоко осъждаха Италия, сигурно още по-рано би се случило с Австрия. Австрия би останала "неутрална" и по такъв начин щеше да се опита да се предпази от избухване на революция в навечерието на войната. При такава обстановка австрийското славянство би предпочело още през 1914 година да отхвърли набързо\r\nмонархията, отколкото да допусне Австрия да воюва заради Германия. Но малцина разбираха тогава опасностите и излишните трудности, които Германия си създаваше благодарение на съюзническата политика с Австрия.');
INSERT INTO tablica VALUES (2, 'Достатъчен беше фактът, че Австрия имаше прекалено много врагове, които мечтаеха само за това, колкото се може по-скоро да получат наследството от умиращата хабсбургска държава. Съвсем ясно беше, че след време срещу Германия щеше да се натрупа омраза за това, че в нея виждаха причината, забавяща разпадането на австрийската монархия, разпадане, което всички очакваха с нетърпение с единствената надежда да получат дял от наследството. В края на краищата, всички стигаха до извода, че до виенското наследство могат д се докопат, само ако си разчистят сметките с Берлин. Това беше първо.');
tova e php-to, koeto veroiatno e nai-blizko do celta:
$Masiv=Array();
$Temp=split('"',str_replace(' "','"',$SearchPattern));
$Masiv=split(' ',trim($Temp[0]));
array_push($Masiv,trim($Temp[1]));
foreach (split(' ',trim($Temp[2])) as $Remaining) {
array_push($Masiv,$Remaining);
} // foreach
$Query = "SELECT * FROM `tablica` WHERE ";
foreach ($Masiv as $SearchElement) {
if ($SearchElement!="") $Query.="`text` like '%".$SearchElement."%' AND ";
} // foreach
$Query = substr($Query,0,strlen($Query)-4).";";
if (Substr($Query,-3)=="WH;") {
echo "No Search Pattern Defined.";
} else {
// Primeren SQL (Zameni ECHO s mysql_query()) - Vseki element ot SearchPattern triabva da e v poleto na bazata danni
// Ako iska6 da vrashta rezultat za koia da e duma, zameni AND s OR v $Query
echo $Query;
}
Kogato probvah da zapisha v txt-poleto slednoto nesto:
"отлично осъзнаваха" "Не го разбираха" съжаление само
Znachi ideiata e takava, che prez tekstovoto pole usera moje da podade kakvoto mu dusha iska, a scripta triabva da sglobi podhodiashta sql zaiavka.
Naprimer usera moje da podade
"duma1 duma1 duma1" duma1 "duma1 duma1" duma1 duma1
i vsiakakvi podobni kombinacii. Otdelno e, che moje da pishe + ili -, ama tiah sha gi mislia posle. Prosto niama kak da razglobia stringa na tyrsenite dumi/izraзи. Веоиатно ще стане, но по много брутален начин - а именно: предлойениа по - горе :
намирам символ (интервал или кавичка) и запомниам позицията на вс един от тях и така.....
Re: трябва ти френски ключ
Въпросът ми беше какво изплюва кодът, който ти дадох?
"Да живееш - значи да се променяш." - Анатол Франс
"Да живееш - значи да се променяш." - Анатол Франс
Re: трябва ти френски ключ
oooopssss...
chustvam se malko nelovko.....
mai triabvashe da pregledam po - vnimatelno ideiata ti oste v nachaloto....
:-((
Mersi mnogo! Vyrvi perfektno, prosto triabvashemyyyynichko da ia pipna, za da raboti s podavan string ot txt polence... 10x otnovo! :-)
Perffektno. Znachi prosto otgovora e
<?
$str = "yeah \"boob mmooo\" yeah skdjhaksjdh kajshdkjas \"lak sdj lasd\" kjh";
preg_match_all("/(?:\"[^\"]*?\")|[^\s]+/", $str, $m);
echo "<pre>\n\n";
print_r($m);
?>



chustvam se malko nelovko.....
mai triabvashe da pregledam po - vnimatelno ideiata ti oste v nachaloto....
:-((
Mersi mnogo! Vyrvi perfektno, prosto triabvashemyyyynichko da ia pipna, za da raboti s podavan string ot txt polence... 10x otnovo! :-)
Perffektno. Znachi prosto otgovora e
<?
$str = "yeah \"boob mmooo\" yeah skdjhaksjdh kajshdkjas \"lak sdj lasd\" kjh";
preg_match_all("/(?:\"[^\"]*?\")|[^\s]+/", $str, $m);
echo "<pre>\n\n";
print_r($m);
?>
Re: трябва ти френски ключ
Именно. 
"Да живееш - значи да се променяш." - Анатол Франс
"Да живееш - значи да се променяш." - Анатол Франс