Diskuze: Odstranění části proměnné
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 20 zpráv z 20.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
explode + unset
str_replace/preg_replace, explode
explode + cyklus + unset
foreach ($arr as $key=>$value) {if ($value=='3') {unset($arr[$key]); break;}}
Nebo mozna nejakou funkci z manualu. Hledal jsi tam vubec? Nebo aspon googlem?
php.net/array nebo
https://www.php.net/…ok.array.php
http://cz.php.net/book.array.php
http://cz.php.net/…ef.array.php
Tragedka, nemel kdo prelozit. Ale vim, ze nejaky starsi manual mel i ceske
preklady.
Díky já to zkusím. Ne nehledal jsem. Jsem v časové tísni a poprvé po dlouhé době využívám mozek větší než ten můj. Díky za pomoc moc si toho vážím.
Ahoj, otázkou je jaká kritéria pro hodnocení "co odebrat" chceš použít. Pokud chceš odebrat třeba první 1čku lze použít...
$new_rating = preg_replace('1,', '', $rating, 1);
Tomáši to vypadá opravdu jednoduše. Díky moc!
Je mi opravdu jedno, kterou jedničku odebrat, čili tohle řešení je moc
prima díky.
php.net/str_replace
$str = "2,5,3,4,4,2,1,1,1,5,5";
$str = str_replace(array('3,', ',3'), array('', ''), $str, 1);
$arr = explode(',' , $str);
// ---
php.net/preg_replace
$str = "2,5,3,4,4,2,1,1,1,5,5";
$str = preg_replace('~,?3,?~', '', $str, 1);
$arr = explode(',' , $str);
'nehledal jsem. Jsem v časové tísni ' - u nas v praci se tomu rika vymluvy
a nedava se za to zadny bonus na vyplatu zvlast proto, ze pri hledani mas reseni do 5 min, na forku do 14 dni.
Kdyz jde zrovna o jednoduchou vec
Ano je to výmluva, ale moc dobrá! Stejně si byl tak hodný a pomohl jsi mi.
Líbilo se mi v tom tvém řešení, že jsi myslel i na to, že ta hodnota, kterou se snažím vymazat bude vůbec ta první nejen ta ve středu nebo na konci řetězce. Je to tedy univerzální přesně pro to co potřebuji.
Tohle mi nedá.
Takže při cca 1000 hodnocení 1-5 budeš mít řetězec dlouhý 2000 znaků?
Předpokládám, že udělené hodnoty nijak nepáruješ, třeba k IP adrese, času a datum udělení.
Ty udělené hodnoty, ukládáš do souboru? Na podobné věci je skvělé SQLite, mohl bys pak mít pole třeba: {3,2,1,2,2}, (pořadí určuje známku hodnocení), v momentě, kdy budeš mít třeba těch 1000 hodnocení, bude to hned veselejší, př. {250,350,180,150,70}.
No máš pravdu. Na to jsem nemyslel
@Peter
to tvoje řešení, které se mi tak líbilo mi hází chybu (týká se druhé
řádky)
$str = "2,5,3,4,4,2,1,1,1,5,5";
$str = str_replace(array('3,', ',3'), array('', ''), $str, 1);
$arr = explode(',' , $str);
PHP: Only variables should be passed by reference
Jestli trváš na zachování řetězce pak zkus tohle:
$str = "2,5,3,4,4,4,2,1,1,1,5,5";
$str = preg_replace("/(1,)/i", "", $str,1);
Smaže to první jedničku, kterou potká.
http://php.net/str_replace
Tak si to podle prikladu sprav?
Ja netvrdil, ze jsem to testoval. Pouze napsal, jakym asi zpusobem to pouzit. Co
se ti nelibi na cyklu z prvni odpovedi?
Example #1 Basic str_replace() examples
// Provides: Hll Wrld f PHP
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace($vowels, "", "Hello World of PHP");
,3 odpovida i ,33
3, odpovida i 13,
a co kdyz vstupni string bude '3' ?
S tim preg replace nastane podobny problem, tam jsem to tez nedomyslel.
preg_replace('~^3()$|^3,()|,3$()|,3(,)~', '$1', $str, 1); // zacatek 3 konec | zacatek 3 carka | carka 3 konec | carka 3 carka // a vyraz v zavorce se objevi v $1, coz je nutne pro posledni pripad, zachovat carku
Mozna by to slo napsat i jednoduseji, ale nechce se mi v patek premyslet
Hynkovo reseni trpi podobnymi nedostatky. Co nechapu, proc tam ma 'i'? 'i' znamena nerozlisuj velikost pismen. Pokud tam neco dat pro univerzalnost, tak spis neco jako gm. Ale jestli si to nepletu s js regularnimi vyrazy..
Díky moc chlapi. Odsud už to zvládnu.
i je setrvacnost, jinak to funguje bez chyby. Vzdy zkousim to co sem davam.
Jinak, cislo na zacatku i v prubehu bude n, kdyz bude na konci, bude tak max jednou, tedy ho nema cenu mazat.
Přijde mi, že ses do toho zamotal Peter Mlich a vyrábíš řešení
na problém který není.
V zadání je psáno, že hodnoty jsou z intervalu 1-5, takže 33, 13 ve stringu
nejsou. V cíli je napsáno, že chce odebrat jednu hodnotou z mnoha ... (myslel
jsem, že ze shodných, na základě předchozího kontextu)
ale dobrá, obecně jakékoliv jedno hodnocení a kdekoliv třeba takto
$new_rating = preg_replace('/1/', '', $rating, 1);
pokud by mu vadilo, že někde zůstanou oddělovače bez hodnot...
$purged_rating = preg_replace('/^,|,,|,$/', '', $new_rating);
nebo lze tyto dva zkombinovat do jednoho, případně obdobně použít
str_replace...
Za zvážení rozhodně stojí příspěvek David Hynek s "nasčítaným
hodnocením".
Ej, tak ještě jedna drobná nepřesnost ... ",," je samo potřeba nahrazovat "," ... ale tak věřím, že chápete kolegové
My to chapeme, ale on asi nepochopi Proto jsem tam daval tolik zavorek do toho preg_replace. Jakoze by
bylo lepsi napsat cely vzorec, pro jistotu. A mozna by bylo prehlednejsi to
vlozit ty moznosti spis do str_replace.
Stejne si myslim, ze uplne nej je ten cyklus, co jsem napsal na zacatku. Explode
vyresi carky a pak uz jen hledas a unsetnes.
Zobrazeno 20 zpráv z 20.