Autor | Zpráva | ||
---|---|---|---|
Yuff.3 Profil |
Ahojte,
chcem z hodnoty odstrániť (napr. mám "+4+7+9-5-3-1+15+-47+65+-87+24-62") - no a chcem dostať len čísla - ako mám postupovať? Akú funkciu použiť? Ďakujem. |
||
juriad Profil |
#2 · Zasláno: 25. 7. 2014, 02:20:49
Nejspíš nějak takto. Nevím ale, jak se chceš chovat k záporným číslům. Teď zachovávám znaménko mínus, jen když před ním je ještě +.
$x = "+4+7+9-5-3-1+15+-47+65+-87+24-62"; var_dump(preg_split('/\+|(?<!\+)-/', $x, -1, PREG_SPLIT_NO_EMPTY)); |
||
Yuff.3 Profil |
#3 · Zasláno: 25. 7. 2014, 06:18:15
Nie, nie..
chcel som odstrániť všetky znamienka, tak, aby mi zostali čísla - následne z čísel spravím ID jednotlivých členov, ktoré aj predstavujú. |
||
juriad Profil |
#4 · Zasláno: 25. 7. 2014, 07:35:42
Takže chceš toto? Tedy odstranit plusy a mínusy a převést na pole?
var_dump(preg_split('/[+-]+/', $x, -1, PREG_SPLIT_NO_EMPTY)); Pokud ne, tak mi vůbec není jasné, co chceš. Zkus napsat, co má být výsledkem toho příkladu, který jsi napsal. |
||
Yuff.3 Profil |
#5 · Zasláno: 25. 7. 2014, 08:32:18
Výsledok má byť: 4 7 9 5 3 1 15 47 65 87 24 62 :)
čiže len samotné čísla :) |
||
juriad Profil |
#6 · Zasláno: 25. 7. 2014, 08:37:03
V tom případě takto:
echo trim(preg_replace('/[+-]+/', ' ', $x)); |
||
Yuff.3 Profil |
#7 · Zasláno: 25. 7. 2014, 11:50:31
Jak previesť na pole?
Chcem, aby tie jednotlivé čísla boli v premennej a oddelene .. Každé číslo samostatne v premennej, ale v jednej premennej, ako keď použijem funkciu "for" napr. |
||
lionel messi Profil |
Yuff.3:
„Chcem, aby tie jednotlivé čísla boli v premennej a oddelene ..“ Nepomôže niečo podobné? <?php $cisla = "+4+7+9-5-3-1+15+-47+65+-87+24-62"; preg_match_all("~[0-9]+~", $cisla, $matches); ?> $matches s číselnými kľúčmi.
|
||
Yuff.3 Profil |
#9 · Zasláno: 25. 7. 2014, 11:56:22
s číselnými kľúčmi? čo to znamená? čo to je? :D
|
||
lionel messi Profil |
Yuff.3:
$matches bude pole:
var_dump($matches); array(1) { [0]=> array(12) { [0]=> string(1) "4" [1]=> string(1) "7" [2]=> string(1) "9" [3]=> string(1) "5" [4]=> string(1) "3" [5]=> string(1) "1" [6]=> string(2) "15" [7]=> string(2) "47" [8]=> string(2) "65" [9]=> string(2) "87" [10]=> string(2) "24" [11]=> string(2) "62" } } a s jednotlivými číslami môžeš jednoducho pracovať pomocou foreach cyklu, napr. si ich vypísať: foreach ($matches[0] as $cislo) { echo $cislo; //vypíše všetky čísla } Kľúče v tomto prípade nie sú veľmi dôležité, ospravedlňujem sa, ak bola zmienka o nich mätúca. Pre istotu rekapitulácia kompletného kódu: <?php $cisla = "+4+7+9-5-3-1+15+-47+65+-87+24-62"; preg_match_all("~[0-9]+~", $cisla, $matches); foreach ($matches[0] as $cislo) { echo $cislo ." "; //vypíše všetky čísla, v tomto prípade pre prehľadnosť oddelené medzerou } Ten regulár môže byť aj v tvare preg_match_all("~\d+~, $cisla, $matches); |
||
Yuff.3 Profil |
#11 · Zasláno: 25. 7. 2014, 12:07:56
Chcem to použiť vo funkcii, kde mi porovná, či sa nachádza v tých číslach nejaké číslo .. podobne ako: if (in_array($moje_cislo, $vsetky_cisla)) {}
|
||
lionel messi Profil |
#12 · Zasláno: 25. 7. 2014, 12:10:36
Yuff.3:
V tom prípade to stačí prejsť regulárom v [#8] a ďalej: $mojecislo = 5; if (in_array($mojecislo, $matches[0])) { //ak je tam číslo 5, tak… } |
||
Yuff.3 Profil |
#13 · Zasláno: 25. 7. 2014, 12:38:07 · Upravil/a: Yuff.3
Moc moc si mi pomohol :)
Vedel by si, (ak by sa to vôbec dalo spraviť), aby mi spočítalo všetky + a za (echo .$počet_plusiek "+";) mi vypísalo čísla, pred ktorými je + .. ?? Dúfam, že si pochopil čo tým myslím.. :) Ak nie skúsim vysvetliť nejako ináč ešte.. :) Ďakujem. No a tie čísla za + aby boli tiež ako $matches[0] - chcem s nimi ešte pracovať ďalej .. |
||
juriad Profil |
#14 · Zasláno: 25. 7. 2014, 13:22:12
Yuff.3:
To, že se snažíš nacpat seznam všech přátel a ještě nějaké příznaky (plus a mínus) do jednoho sloupce v databázi, ti to vše jen komplikuje. Napřed jsi měl přátele oddělené tečkami, teď používáš plus a mínus, co budeš dělat, až si budeš chtít uložit datum přidání mezi přátele? Předpokládám, že do závorky za ID přítele napíšeš datum. Budeš chtít někdy upozorňovat na aktivitu nebo narozeniny uživatele? Budeš chtít žebříčky uživatelů podle oblíbenosti? Budeš chtít hodnocení uživatelů? Dokážeš si představit řešení kterékoli z těchto úloh? Jestli ne, měl bys začít přemýšlet, zda současný systém vůbec umožňuje jejich efektivní řešení. Takto se to ale nedělá z dobrých důvodů. Znovu ti řeknu, že při správném návrhu databáze bys tyto problémy vůbec neřešil. Myslíš-li svůj projekt vážně, začni pořádně od spoda, od návrhu datového modelu. Jakmile databázi jednou navrhneš špatně, už se vezeš a lepíš jednu pitomost na druhou. Za chvíli se dostaneš do stavu, že udělání jedné malé změny se nutně projeví v celé aplikaci a nezbyde ti nic jiného, než ji z větší části přepsat znovu - nebo opustit nedokončenou. Vzniknou ti také kusy kódu, kterým se budeš vyhýbat, protože víš, že jim nerozumíš, jsou nepřehledné a trvalo dlouho je "odladit". Z dobrého důvodu píši tímto tónem, protože chci abys věděl, že problémy, které řešíš, nikdo jiný neřeší, nemusí je řešit, protože jim nikdy nenastanou. Nepomáhá ti ani to, že pořád měníš zadání. Možná ty víš, co chceš, ale osobně o tom pochybuji. |
||
Yuff.3 Profil |
#15 · Zasláno: 25. 7. 2014, 13:39:50
juriad:
Moc krát ti ďakujem - očividne vieš o čom hovoríš a ja sa každopádne netvárim, že nemáš pravdu. Jednoducho mi tento spôsob príde lepší a jednoduchší a viac mi vyhovuje. Nie som na úrovni, že by som zvládol navrhnúť DB a hrať sa s ňou do detailov - určite by som to zvládol, naučil by som sa to, ale zbytočne. Nemám v pláne riešiť to na úrovni, kde by to bolo potrebné.. Áno, priateľov mám vyriešených - presne podľa mojich predstáv. :) A či si dokážem predstaviť riešenie problému ako napr. hodnotenie užívateľov? Práve na tom pracujem ;) Preto by som moc ocenil, keby mi niekto odpovedal na (#13) otázky. Prakticky tým dokončím aj tento projekt - len tieto veci ma delia od ukončenia. :) |
||
Fisir Profil |
#16 · Zasláno: 25. 7. 2014, 21:27:50
Reaguji na Yuff.3:
„Nikto ?? :(“ Já, asi i spousta jiných lidí, ale nikomu se nechce řešit tvoje zbytečné problémy (špatná struktura databáze). function countAndReturn($string){ $regex = '/\+(\d+)/'; preg_match_all($regex, $string, $matches); $return = $matches[1]; foreach($return as $i => $int){ $return[$i] = intval($int); } $return['count'] = count($return); return $return; } |
||
Yuff.3 Profil |
#17 · Zasláno: 26. 7. 2014, 19:15:54
Môžeš mi prosím ťa trochu popísať tú funkciu alebo nejako upraviť alebo neviem - pretože mi to vôbec nejde :(
|
||
Fisir Profil |
Reaguji na Yuff.3:
countAndReturn('+4+7+9-5-3-1+15+-47+65+-87+24-62'); array(7) { [0]=> int(4) [1]=> int(7) [2]=> int(9) [3]=> int(15) [4]=> int(65) [5]=> int(24) ["count"]=> int(6) } +4+7+9-5-3-1+15+-47+65+-87+24-62 ) a ona ti v poli vrátí všechna čísla, před kterými je + . Navíc, pod klíčem count najdeš počet čísel, před kterými je + . Přesně tak, jak jsi chtěl.
|
||
Yuff.3 Profil |
#19 · Zasláno: 26. 7. 2014, 20:08:30 · Upravil/a: Yuff.3
mmnt, čiže to musím takto vypísať všetky tie array ??
Nedá sa to spraviť tak, že tie čísla +4+7+9-5-3.. atď .. budú v $cisla - pretože ten počet čísel a znamienka pred nimi môže byť akýkoľvek - resp. vyťahujem to z DB - kde sa to zapisuje rôzne/náhodne.. Myslel som, že by sa dalo len: countAndReturn('$cisla'); a ďalej by pokračovala funkcia ktorú si mi napísalv #16 príspevku..Absolútne žiadno mi to nejde :D :( :( |
||
Fisir Profil |
#20 · Zasláno: 26. 7. 2014, 21:02:22
Reaguji na Yuff.3:
Aha… „by sa dalo len: countAndReturn('$cisla'); “
Přesně tak, tuto funkci zavoláš (ale pozor, pokud chceš předat proměnnou $cisla , nesmí být v jednoduchých uvozovkách) a ta ti vrátí to pole, jak je zmíněno v [#18].
|
||
Yuff.3 Profil |
Fisir:
Ale niečo tam je zle, na tej funkcii.. :( Aj keď som tam dal čísla pod tú funkciu: countAndReturn('+4+7+9-5-3-1+15+-47+65+-87+24-62') ; - v takomto tvare, tak to proste nič nevypíše :( :( nestreba ju nejako zapnúť tú funkciu? :D napr. countAndReturn(TRUE) {echo "sem: " .$cisla;} ?? :D |
||
Tori Profil |
Yuff.3:
„tak to proste nič nevypíše“ Fisirova funkce nic nevypisuje, ale vrací pole. Když ho chcete vypsat, musíte si o to říct. A abych vám ušetřila jeden dotaz, tak echo countAndReturn("+4+7+9"); nebude fungovat a vypíše jen "Array". Jednotlivé hodnoty v poli se dají procházet např. cyklem foreach (pak s nimi můžete dělat cokoli, třeba je vypsat), anebo si můžete zobrazit celé pole tak jako v [#18] funkcemi var_dump nebo print_r.
Koukněte taky na učebnici pehapko.cz - kapitola o polích je sice zrovna ještě v přípravě, ale můžete se tam naučit jiné základní věci. |
||
Fisir Profil |
#23 · Zasláno: 27. 7. 2014, 09:22:45
Reaguji na Yuff.3:
Pro všechny bude nejlepší, když se naučíš alespoň základy PHP. |
||
Yuff.3 Profil |
#24 · Zasláno: 28. 7. 2014, 18:55:53
Základy ako tak ovládam, ale toto je na mňa otrchu zložité. Čiže ako teda vypíšem to čo potrebujem? Pretože stále mi to nejde aj keď som tam dal ten foreach pod tú funkciu.. Môžete mi niekto napísať ako konkrétne by to malo byť?? Zrejme som zavolal nesprávnu premennú alebo neviem :( Proste nič mi to nevypíše :(
Rád by som túto záležitosť konečne uzavrel.. Moc krát ďakujem. |
||
Fisir Profil |
#25 · Zasláno: 28. 7. 2014, 19:20:10
Reaguji na Yuff.3:
$numbers = countAndReturn('+4+7+9-5-3-1+15+-47+65+-87+24-62'); echo("Našel jsem ".$numbers['count']." čísel ("); foreach($numbers as $i => $number){ if($i !== 0) echo("; "); echo($number); } echo(")."); |
||
Yuff.3 Profil |
#26 · Zasláno: 29. 7. 2014, 16:38:56 · Upravil/a: Yuff.3
Vôbec to nie je zbytočné :) Teraz tomu chápem :) Ale ako dám záporné? -(mínus)??
Posledná vec k tejto téme a môžeme lock :D Vlastne ešte jeden detail, to prvé číslo z tých kladných sa mi zopakuje ešte na konci :( |
||
Fisir Profil |
#27 · Zasláno: 29. 7. 2014, 17:56:00
Reaguji na Yuff.3:
„Teraz tomu chápem“ No, to je vidět. „ako dám záporné?“ Chtěl jsi jenom čísla s plusem, ale můžeš mít samozřejmě i s mínusem… function countAndReturn($string){ preg_match_all('/\+(\d+)/', $string, $matches); $return['positive'] = $matches[1]; preg_match_all('/-(\d+)/', $string, $matches); $return['negative'] = $matches[1]; foreach($return as $type => $numbers){ foreach($numbers as $i => $number){ $return[$type][$i] = intval($number); } } $return['count']['positive'] = count($return['positive']); $return['count']['negative'] = count($return['negative']); return $return; } „to prvé číslo z tých kladných sa mi zopakuje ešte na konci“ To není to první číslo, že se s ním shoduje, je jen náhoda a hezky to ukazuje, žes ten kód jen zkopíroval. Zkus se zamyslet nad tím, co ten foreach cyklus dělá…
|
||
Yuff.3 Profil |
#28 · Zasláno: 29. 7. 2014, 18:13:12
Fisir:
Veľmi pekne moc krát ďakujem :) No možno nechápem presne všetko :D ako mám ale teraz zapísať tento riadok - echo("Našel jsem ".$numbers['count']." čísel ("); ?
Pretože mi vypíše len array .. :( No a foreach si teda preštudujem a skúsim na to prísť sám :) Ešte raz ďakujem :) |
||
Kubo2 Profil |
#29 · Zasláno: 29. 7. 2014, 19:03:07
Yuff.3:
„Teraz tomu chápem“ „ako mám ale teraz zapísať tento riadok - echo("Našel jsem ".$numbers['count']." čísel ("); ?“ Nerozumieš tomu vôbec (týmto ťa nijak neponižujem, iba zhŕňam to, čo je zjavné v tomto vlákne o tvojich vedomostiach). Tým „posledným detailom“ si nám to iba potvrdil. Ak by ťa zaujímalo riešenie toho tvojho „posledného detailu“, odporúčam prečítať si niečo o type array v PHP a následne si tú premennú $numbers nechať vypísať funkciou print_r() -> <?php // ... print_r($numbers); Naozaj odporúčam vyskúšať to, čo som ti napísal, pretože to je asi najschodnejšia cesta, ako získať aspoň približnú predstavu o fungovaní polí („ array s“) v PHP.
|
||
Yuff.3 Profil |
Verím, že Fisir mi napíše ako to má byť. Tvoj spôsob sa mi nepáči :(
|
||
Téma pokračuje na další straně.
|
0