Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

PHP - Platzhalter in String - wie lösen?

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
xoni
PostRank 8
PostRank 8
Beiträge: 692
Registriert: 22.08.2007, 12:14

Beitrag von xoni » 27.05.2011, 11:00

Hallo @ All,

gegeben sei ein String nach folgendem Muster:

Code: Alles auswählen

 'Rubrik-Name-%ID%'
Mit Hilfe von switch/case möchte ich nun den String weiter verarbeiten.
Dabei soll es egal sein, welchen Wert %ID% hat also...

Code: Alles auswählen

 'Rubrik-Name-12'

Code: Alles auswählen

 'Rubrik-Name-433'

Code: Alles auswählen

 'Rubrik-Name-1012'
soll jeweils durch den case-Fall ''Rubrik-Name-%ID%' erkannt werden.
Ich hoffe, mein Problem ist verständlich.

Danke für jeden Tipp...

Anzeige von ABAKUS

von Anzeige von ABAKUS »

Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 27.05.2011, 11:16

Hm, also was Du so vom Grund her willst habe ich verstanden aber nicht, was Du da mit dem switch willst.

bei "switch" wird ja ein Variable auf einen fest vorgegeben Wert geprüft / verglichen. Du hast aber keinen festen Wert, sondern einen String, der sich ändert.

Sag doch mal genau was Du machen willst.

Wirths Media
PostRank 9
PostRank 9
Beiträge: 2050
Registriert: 20.09.2004, 20:25

Beitrag von Wirths Media » 27.05.2011, 11:16

Leider verstehe ich es nicht ganz...

Ist ein 'Rubrik-Name-'.$id; nicht ausreichend?

Gruß
Daniel

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


xoni
PostRank 8
PostRank 8
Beiträge: 692
Registriert: 22.08.2007, 12:14

Beitrag von xoni » 27.05.2011, 11:43

@ Synonym
bei "switch" wird ja ein Variable auf einen fest vorgegeben Wert geprüft / verglichen. Du hast aber keinen festen Wert, sondern einen String, der sich ändert.
Genau das ist mein Problem.
Bei der switch/case Prüfung soll immer die case anweisung durchgeführt werden,
wenn der String aus ''Rubrik-Name-%ID%' besteht, egal was für einen Wert die ID hat.
Hm, so wie das aussieht, scheint das wohl nicht zu klappen.

@calusa-xx
Ist ein 'Rubrik-Name-'.$id; nicht ausreichend?
Ne, das reicht leider nicht.

Das ganze ist eine art "Weiche" für verschieden URLs

Code: Alles auswählen

case 'Rubrik-Name-#'.$i.'':
if ($this->customer->isLogged()) {
$result = explode("#", $seo_url);
$this->request->get['rubrik_id'] = $result[1];
$this->request->get['route'] = 'account/rubrik/delete';
} else {
$this->request->get['route'] = 'account/login';
}
break;
Danke dennoch für Eure Antworten

DanielS
PostRank 9
PostRank 9
Beiträge: 1179
Registriert: 03.08.2008, 08:45

Beitrag von DanielS » 27.05.2011, 11:53

Nimm doch von ''Rubrik-Name-%ID%" den substring(0,12) und prüfe ob er == "Rubrik-Name-" ist.

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 27.05.2011, 11:54

Ja und nein.... Ich bin etwas verwirrt und nicht wirklich sicher....

Der String hat also eine Ziffer enthalten am Ende... KEINEN PLATZHALTER, oder ?

Das oben ist also ein Case... Was wäre denn ein anderer? Wie kann der String denn noch aussehen? Daher fragte ich ja, was genau Du vor hast.

Vielleicht wäre es ja viel einfacher einfach zu prüfen, ob da denn eine ID angehängt ist... Vielleicht braucht man das Switch ja gar nicht....

Wirths Media
PostRank 9
PostRank 9
Beiträge: 2050
Registriert: 20.09.2004, 20:25

Beitrag von Wirths Media » 27.05.2011, 11:56

Leider stehe ich noch immer auf dem Schlauch...

Aber wie wäre es mit einer If(eregi('Rubrik-Name-', Anweisung.

xoni
PostRank 8
PostRank 8
Beiträge: 692
Registriert: 22.08.2007, 12:14

Beitrag von xoni » 27.05.2011, 12:02

@ DanielS
Nimm doch von ''Rubrik-Name-%ID%" den substring(0,12) und prüfe ob er == "Rubrik-Name-" ist.
Das klingt gut; ist zwar etwas "von hinten durch die Brust", sollte aber funktionieren.

Die ID per Get anzuhängen ist in dem Fall leider nicht möglich.
Die ID könnte höchstens ein Bestandteil der URL sein. Die kann ich ja
dann mit explode zerlegen.


Das oben ist also ein Case... Was wäre denn ein anderer? Wie kann der String denn noch aussehen?
z.B. so

Code: Alles auswählen

case 'Kundenkonto-Stammdaten':
                if ($this->customer->isLogged()) {
					$this->request->get['route'] = 'account/edit';
				} else {
					$this->request->get['route'] = 'account/login';
				}
                break;


 				case 'Kundenkonto-Newsletter':
                if ($this->customer->isLogged()) {
					$this->request->get['route'] = 'account/newsletter';
				} else {
					$this->request->get['route'] = 'account/login';
				}
                break;


				case 'Kundenkonto-Adressbuch':
                if ($this->customer->isLogged()) {
					$this->request->get['route'] = 'account/address';
				} else {
					$this->request->get['route'] = 'account/login';
				}
                break;
Der String hat also eine Ziffer enthalten am Ende... KEINEN PLATZHALTER, oder ?
Korrekt, eine Ziffer, keinen Platzhalter.

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 27.05.2011, 12:23

Also es wäre einfacher gewesen, wenn Du das switch komplett genannt hättest ohne den Inhalt vom Case.

Ich habe das nun mal so aufgefasst. Es ist immer ein String und der wird im switch verglichen. Nur dieser eine enthält am Ende beliebige Ziffern.

Also so was in der Art (ungetestet):

Code: Alles auswählen

<?php
$string = 'Rubrik-Name-1012';

switch &#40;true&#41;
&#123;
	case &#40;$string === 'Kundenkonto-Stammdaten'&#41;&#58;
		echo 'Kundenkonto-Stammdaten';
		break;
	case preg_match&#40;"/.+-\d+$/", $string&#41;&#58;
		echo 'preg_match';
		break;
	case &#40;$string === 'was_anderes'&#41;&#58;
		echo 'was_anderes';
		break;
	default&#58;
		echo 'default';
&#125;
?>

xoni
PostRank 8
PostRank 8
Beiträge: 692
Registriert: 22.08.2007, 12:14

Beitrag von xoni » 27.05.2011, 12:29

Also es wäre einfacher gewesen, wenn Du das switch komplett genannt hättest ohne den Inhalt vom Case.
Sorry, ich bin nicht so fit in Sachen "Probleme" beschreiben.
Die preg_match("/.+-\d+$/", $string) Geschichte schau ich mir mal ein wenig genauer an, ich denke das könnte was werden.

Danke Euch allen und ein schönes WE...

SloMo
PostRank 10
PostRank 10
Beiträge: 4880
Registriert: 04.01.2005, 18:26

Beitrag von SloMo » 27.05.2011, 12:36

Warum switch-case missbrauchen, wenn es if-elseif-else gibt? Es könnte sich irgendwann rächen...

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 27.05.2011, 13:32

@SloMo
Das kommt natürlich darauf an, wie viele Optionen es gibt. Ich bevorzuge auch lieber switch, da es übersichtlicher und auch schneller ist. Allerdings wäre mir das Gebilde (wenn es nur wenige Case gibt) auch zu "umständlich".

Würde da wohl auch eher etwas nehmen wie:
if(preg_match(xxx))
- dann das
else
- und hier dann eventuell das switch/case rein.

xoni
PostRank 8
PostRank 8
Beiträge: 692
Registriert: 22.08.2007, 12:14

Beitrag von xoni » 27.05.2011, 13:48

Das kommt natürlich darauf an, wie viele Optionen es gibt. Ich bevorzuge auch lieber switch, da es übersichtlicher und auch schneller ist. Allerdings wäre mir das Gebilde (wenn es nur wenige Case gibt) auch zu "umständlich".
Das war auch der Grund, warum ich mich für switch/case entschieden habe.
In meinem Fall liegen cs. 40 case Möglichkeiten vor. Das erschein mir übersichtlicher als eine wilde if-Konstruktion.

M4rco
PostRank 2
PostRank 2
Beiträge: 58
Registriert: 06.08.2007, 18:37

Beitrag von M4rco » 28.05.2011, 13:32

Code: Alles auswählen

<?php

$item = "Auto";
$count = 1;
echo sprintf&#40;"Das ist mein %d %s", $count, $item&#41;;


m0dpad
PostRank 1
PostRank 1
Beiträge: 24
Registriert: 29.03.2011, 13:45

Beitrag von m0dpad » 01.06.2011, 19:05

Ganz easy. Wenn man ein einen genau definierten String hat den man matchen möchte, sollte man den regulären Ausdruck auch entsprechend formulieren.

Der Vorschlag:
preg_match("/.+-\d+$/", $string):

Würde auch andere Strings matchen, die das selbe Schema haben (z.B. 'srik-kopfman-sdsad-0112' würde genauso wie 'Rubrik-Name-0112' erkannt).

Code: Alles auswählen

$string = 'Rubrik-Name-0112';
$pattern = '/&#40;Rubrik-Name-&#41;&#91;0-9&#93;+/';
switch&#40;$string&#41; &#123;

 case &#40;bool&#41;preg_match&#40;$pattern, $string&#41; &#58;
	echo 'match in '.$string;
 break;
 default&#58;
	echo 'no match';
 break;	

&#125;
Mein Blog (Video-) Tutorials rund um das Thema Webentwicklung, PHP, Javascript, HTML, CSS und was es sonst noch gibt.

Tippfehler - Tool
mit Domain - Check

Antworten