Prüfung eines einzelnen Wortes aus einem String

Andraste

Grünschnabel
Hallo.

Angenommen ich hab in einem string namens $ausgabe einen ganzen Satz.

Auf einem Deutsch-eingestellten Computer lautet der Inhalt von $ausgabe z. B.:
"Das ist ein Computer."
Und auf einem Englisch-engestellten Computer lautet er z. B.:
"This is a computer."

Jetzt möchte ich quasi herausfinden, auf welche Sprache der Computer eingestellt ist.
So wie:
if(erstes wort von $ausgabe == "Das") { $sprache = "Deutsch"; }
if(erstes wort von $ausgabe == "This") { $sprache = "Englisch"; }


(Die Abfrage darf sich nur auf das erste Wort beziehen, weil der Rest des strings in der Praxis variabel ist. Daher kann ich keine Abfrage des ganzen Strings benutzen.)
Gibt es da eine Möglichkeit?

Vielen Dank im Voraus, Andraste
 
Moin Andraste,

das geht recht einfach mit regulären Ausdrücken:)
PHP:
$sprache=(preg_match('@^\s*Das\b@i',$ausgabe))
                       ?'Deutsch'
                       :'Englisch';
 
Das klingt ja schon recht nett...

Wie würde das ganze denn aussehen, wenn man auf noch mehr Sprachen prüfen müsste?

z. B.:
Das - Deutsch
This - Englisch
Esto - Spanisch
Cela - Französisch

etc...
 
Das ginge bspw. über einen Array recht praktisch...
PHP:
$sprachen = array('das'   =>  'de',
                  'this'  =>  'en',
                  'esto'  =>  'esp',
                  'cela'  =>  'fr');
                  
$sprache  = (preg_match('@^\s*('.implode('|',array_keys($sprachen)).')\b@i',$ausgabe,$match))
                  ? $sprachen[strtolower($match[1])]
                  : 'nix';
 
Hm ... das sieht ziemlich logisch aus, ja :)
Aber leider funktioniert das nicht und ich kenn mich mit PHP nicht so gut aus, als dass ich da den Fehler finden könnte.
Hast du dich vllt nur verschrieben? Naja. Auf jeden Fall funktioniert das so grad nicht. (Er gibt nichts aus - nichtmal 'nix').

Wenn dir das hilft, könnte ich dir auch den genauen Inhalt von $ausgabe schreiben ...
 
Du musst $sprache natürlich auch noch ausgeben.

PHP:
<?php

$ausgabe = 'Cela blabla blub';

$sprachen = array('das'   =>  'de',
                  'this'  =>  'en',
                  'esto'  =>  'esp',
                  'cela'  =>  'fr');
                  
$sprache  = (preg_match('@^\s*('.implode('|',array_keys($sprachen)).')\b@i',$ausgabe,$match))
                  ? $sprachen[strtolower($match[1])]
                  : 'nix';  

				  
echo $sprache;
?>
 
Also bei mir funktioniert das...
Schleife und Array sind nur zum Testen reingepackt.
PHP:
<pre>
<?php

$example = array('das foo', 'this foo', 'esto foo', 'cela foo');

$sprachen = array('das'   =>  'de',
                  'this'  =>  'en',
                  'esto'  =>  'esp',
                  'cela'  =>  'fr');
                  
foreach($example as $value)
{
	$ausgabe = $value;
	$sprache  = (preg_match('@^\s*('.implode('|',array_keys($sprachen)).')\b@i',$ausgabe,$match))
                  ? $sprachen[strtolower($match[1])]
                  : 'nix';  
	echo $sprache."\n";
}
				  
?>
</pre>

Ausgabe hat gesagt.:
 
Ja, so funktioniert das bei mir auch ...
Nur wenn ich das anpasse funktionierts plötzlich nicht mehr ...


//EDIT: Habs ... lag am strtolower. ^^ Danke für alles^^
 
Zuletzt bearbeitet:
Zurück