Autor Zpráva
capricorn
Profil
Zdravim, potreboval bych poradit nejlepsi zpusob, jak postupne vymazat hodnoty z retezce. Napsal jsem si na to funkci, ale ta nefunguje spravne.


function zobrazit_k_odstraneni(){

if(!isset($_GET['nazev'])){
return false;
}
$retezec = explode(";", $_GET['nazev']);
$nazvy = array();
$nazev = array();
foreach($retezec as $klic => $hodnota){
if(!in_array($hodnota, $retezec)){
unset($retezec[$klic]);
} else {
$nazvy[] = $hodnota;
}
if(count($nazvy) > 0){
$nazev[] = "<a href=\"/?nazev=" . implode(";", $nazvy) ."\">$hodnota</a>";
} else {
$nazev[] = "<a href=\"./\">$hodnota</a>";
}
}
return implode(", ", $nazev);
}

echo zobrazit_k_odstraneni();

DJ Miky
Profil
jak postupne vymazat hodnoty z retezce

Jaké hodnoty z jakého řetězce? Popiš trochu detailněji, o co ti konkrétně jde. Ze samotného kódu toho moc nevymyslíme.
capricorn
Profil
DJ Miky

Napr.

$retezec = "monitor;televize;radio";

Potrebuji, aby vzniklo:

1. odkaz: /?nazev=televize;radio
2. odkaz: /?nazev=monitor;radio
3. odkaz: /?nazev=monitor;televize

Kliknu napr. na 1.odkaz(/?nazev=televize;radio) a melo by vzniknout:

1. odkaz: /?nazev=radio
2. odkaz: /?nazev=televize

Kliknu napr. na 2.odkaz(/?nazev=televize) a melo by vzniknout:
1. odkaz ./
capricorn
Profil
Omlouvam se, ze obnovuji tohle vlakno, ale nemuzu s tim hnout. Nepotrebuji, aby za mne nekdo psal tu funkci, ale potrebuji proste jen poradit, jak a co mam udelat.
BetaCam
Profil
capricorn
Omlouvam se, ze obnovuji tohle vlakno, ale nemuzu s tim hnout. Nepotrebuji, aby za mne nekdo psal tu funkci, ale potrebuji proste jen poradit, jak a co mam udelat.

Nevím, ale všechny tvé operace s poli mi přijdou nějaké zbytečně složité. Nevim jestli sem uplně přesně pochopil to co chces pokud ne tak ještě jednou upřesni informace co ma ta funkce vyhazovat za jakych okolností atd.

function url(){
if (empty($_GET['nazev'])) { return FALSE; }

	$segment = explode(';', $_GET['nazev']);
	$linkname = array_shift($segment);
	$newlink = implode(';', $segment);

	return '<a href="'.($newlink == '' ? './' : '/?nazev="'.$newlink).'">'.$linkname.'</a>';
}

echo url();
capricorn
Profil
BetaCam

Ja uz to nedokazu lip vysvetlit a proto sem davam asi opet zbytecne slozitou funkci, ktera nazorne ukaze o co mne vlastne jde.


function zobrazit_k_odstraneni(){

if(empty($_GET['nazev'])){
return false;
}

$retezec = explode(";", $_GET['nazev']);
$nazvy = array();
foreach($retezec as $klic => $hodnota){
$nazvy[] = $retezec;
if(in_array($hodnota, $nazvy[$klic])){
unset($nazvy[$klic][$klic]);
}
if(count($retezec) != 1){
$nazvy[$klic] = "<a href=\"/?nazev=" . implode(";", $nazvy[$klic]) ."\">$hodnota</a>";
} else {
$nazvy[$klic] = "<a href=\"./\">$hodnota</a>";
}
}
return implode(", ", $nazvy);
}

echo zobrazit_k_odstraneni();

BetaCam
Profil
capricorn

function zobrazit_k_odstraneni(){
	if(empty($_GET['nazev'])){ return FALSE; }
	$request = $_GET['nazev'];
	$segments = explode(';', $request);
	$count = count($segments);
	if ($count == 1) { return '<a href="./">'.$segments[0].'</a>'; }
	foreach($segments as $key => $val){
		if ($key == $count-1) {
			$link = str_replace(';'.$val, '', $request);
		}else{
			$link = str_replace($val.';', '', $request);
		}
		$out[] = '<a href="/?nazev='.$link.'">'.$val.'</a>';
	}
	return implode(", ", $out);
}


Má to samozdřejmě i několik mínusů. Konstrukce funkce je řešena trochu přes ruku. Důvodem této konstrukce je rychlost. Dalo by se to přepsat sice jednodušeji, ale s razantním snížením rychlosti. Razantním snížením myslím zvýšení času pro provedení funkce zhruba o polovinu.

Nic méně bohužel si furt nejak nedovedu představit kde by se takovéhle funkce mohli v praxi hodit.

EDIT: Ještě sem tam udělal změnu, aby se nemusela volat tolikrát funkce implode()

Při řetězci a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z je počet volání funkcí :

V tvé funkci
in_array		26x
explode			1x
implode			27x
count			26x

v mé funkci
str_replace		26x
explode			1x
implode			1x
count			1x
capricorn
Profil
BetaCam

Takoveho ucitele, ktereho mas ocividne Ty, bych take chtel mit. ;-) V praxi se tato funkce hodi, kdyz vyhledavas vice slov, ktere mas v retezci. Tou funkci odpada, ze budes v inputu vyhledavat a mazat slova rucne.

Jinak se mam co ucit a uprimne Ti dekuji za pomoc.
BetaCam
Profil
capricorn
Takoveho ucitele, ktereho mas ocividne Ty, bych take chtel mit.

Popravdě učitele na programování sem nikdy v pravém slova smyslu neměl.

Jinak se mam co ucit

Tak to sme dva.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0