problem s razglobiavane na string

12 отговора 206 прегледа
#1

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.

Отговор
в отговор на sdsdsd #2

Re: problem s razglobiavane na string

опитай с explode

Отговор
в отговор на sdsdsd #3

трябва ти френски ключ


<?
$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 на

Отговор
в отговор на Dakota #4

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... :-)))

Отговор
в отговор на asdasd #5

Re: трябва ти френски ключ

Имаш и друг вариант, класически, без regexp(въпреки, че с regexp би трябвло да стане). Правиш един цикъл по дължината на низа. Когато попаднеш на разделител (интервал например) запомняш позицията, и така до следващия разделител, и после *заградения низ* от 2та разделителя го добавяш в масива. Ако попаднеш на кавичка, казваш, аха т'ва е от ония(запазваш си позицията) и чакаш "затварящата" кавичка. Въпросния отрязък -> в масива. Отделно можеш да си проверяваш дали израза е верен, т.е да нямаш незатворени кавички. Може да е банално... но ако върши работа и си зациклил...

If you don't care where you are going any road will get you there
Отговор
в отговор на asdasd #6

Re: трябва ти френски ключ

Е как така не става?!

При мен си работи чудесно...я пробвай пак.

"Да живееш - значи да се променяш." - Анатол Франс
Отговор
в отговор на antipop #7

Re: трябва ти френски ключ

10x, ste opitam i taka. Dori obestavam da postana, ako uspeia :-)

Отговор
в отговор на Dakota #8

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 :-) :-) :-)

Отговор
в отговор на asdasd #9

Re: трябва ти френски ключ

И какво получаваш като изход от това, което ти пратих?

"Да живееш - значи да се променяш." - Анатол Франс
Отговор
в отговор на Dakota #10

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зи. Веоиатно ще стане, но по много брутален начин - а именно: предлойениа по - горе :
намирам символ (интервал или кавичка) и запомниам позицията на вс един от тях и така.....

Отговор
в отговор на asdasd #11

Re: трябва ти френски ключ

Въпросът ми беше какво изплюва кодът, който ти дадох?

"Да живееш - значи да се променяш." - Анатол Франс
Отговор
в отговор на Dakota #12

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);
?>



Отговор
в отговор на asdasd #13

Re: трябва ти френски ключ

Именно.

"Да живееш - значи да се променяш." - Анатол Франс
Отговор