externe Variable (array) in funktion ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
aufruf
bedarf
code
dank
ersetzen
file
funktion
gelbe kugel
nacht
parameter
pos
scheinen
sonne
string
suche
url
wirtschaft
wort
zeile
-
Hallo
ich verzweifel gerade, weil es nicht schaffe ein array (aus .txt ausgelesen) in einer Funktion zu nutzen
(die _diewortr1.txt enthält je Zeile ein Wort)
Wirtschaft Unternehmen Transport Microsoft Recht
wenn ich innerhalb der fuktion zum DEBUG ein echo bzw. print_r($alinks_word) mache, kommen sie an
aber ich bekomme die Werte nicht bis zum return ?!? ... so dass sich am string was ändert ???
a) so kommt keine Änderung am $string zustande: ???? !
$alinks_word = file($_SERVER['DOCUMENT_ROOT']."/data/_diewortr1.txt"); function make_autolinks($string) { global $alinks_word; $alinks_link = array(); $i=0; foreach ($alinks_word as $value) { $value = trim(chop($value)); $alinks_link[$i] = "<a style=\"color:#0000AA;\" href=\"index.php?q=".$value."\">".$value."</a>"; $i++; } $str_mit_links = str_replace($alinks_word, $alinks_link, $string); return($str_mit_links); }
b) aber so funktioniert es: ... wenn ich die Worte nicht aus der .txt lese, sondern direkt angeben
function make_autolinks($string) { $alinks_word = array( "Wirtschaft", "Unternehmen", "Transport", "Microsoft", "Recht" ); $alinks_link = array(); $i=0; foreach ($alinks_word as $value) { $value = trim(chop($value)); $alinks_link[$i] = "<a style=\"color:#0000AA;\" href=\"index.php?q=".$value."\">".$value."</a>"; $i++; } $str_mit_links = str_replace($alinks_word, $alinks_link, $string); return($str_mit_links); }
könnte jemand so frundlich sein, und mir das mal erklären oOo
komisch, habe das array doch als global angegeben ?!
HELP plz
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
na du machst ja aus den geladenen daten aus dem .txt file keinen array!
$alinks_word = explode('\r\n', file($_SERVER['DOCUMENT_ROOT']."/data/_diewortr1.txt"));
so müsste es glaube ich funktionieren -
quatsch
mit dem Befehl file() bekomme ich doch schon ein array ... je Zeile ein Wert
und den Zeilenumbruch entferne ich ja mit chop()
ich kann das Array ja auch als DEBUG innerhalb der Funktion ausgeben, also Daten sind da, aber irgendwas ist ja falsch, weil keine Änderung im String erfolgt bei Funktionsaufruf
ja, der string enthält mind ein Wort aus der Liste
wie oben in Bsp2 ... es geht ja, wenn ich das array innerhalb der Funktion "per Hand" anlege
aber warum dann nicht wenn ich das array aus .txt importiere =?
EDIT: ... habs gefunden
habe nur im $value den Zeilenumbruch entfernt, aber nicht im Array dann wieder eingetragen,
also nach
$value = trim(chop($value));
noch die Zeile
$alinks_word[$i] = $value;
dann geht's
:)
oder halt gleich anstatt
$value = trim(chop($value));
so
$alinks_word[$i] = trim(chop($value));
.. und entsprechend in der Link-Erzeugung anstatt $value den Array-Teil
noch einfacher
...
sry .. verpeilt
gelöst ... problem war Zeilenumbruch
Danke trotzden
EDIT: hab nioch ne andere Frage
Wie kann ich ein str_replace($array1, $array2, $string)
so auf einen String anwenden, das wenn das zu ersetzende Wort mehrfach vorkommt,
dass es aber nur einmal ersetzt wird ?
mit einzelnen Worten (nicht als Array) kein Prob. , einen Zähler / Schalter einfügen
aber bei Arrays? .... gibts da evtl einen optionalen Parameter ... oder geht sowas nur mit preg_replace ... wie?
Danke
Beitrag zuletzt geändert: 7.5.2011 17:08:25 von gewerbestart -
str_replace kann auch mit arrays umgehen ($array1 und $array2 müssen die selbe Länge haben, sonst gibts Murks). Logischerweise wird aber jedes Vorkommen ersetzt.
Mit array_unique kannst du doppelte Werte aus einem Array entfernen.
Es kann aber auch sein, dass ich dich völlig falsch vestanden habe :D preg_replace ist vielleicht nicht die performanteste, dafür eine der besten Lösungen. -
Hallo
ja, ich habe ja schon str_replace mit zwei arrays
problem sind nicht die arrays, sondern, wenn im string eines der zu ersetzenden Worte mehrfach vorkommt
$string = "Seit heute Morgen scheint die Sonne aber in der Nacht wird keine Sonne mehr scheinen"
$string2 = str_replace("Sonne", "gelbe Kugel", $string);
wie stelle ich es an, dass "Sonne" aus dem string nur einmal ersetzt wird ... z.B. das erste vorkommen
$string2 = "Seit heute Morgen scheint die gelbe Kugel aber in der Nacht wird keine Sonne mehr scheinen"
ich dache, vielleicht gibts sowas wie , (Komma) 1 im str_replace, um nur einmal zu ersetzen?
habe dazu in der Doku aber nichts gefunden
-
Das gibts nur mit pre_replace:
<? $string = 'Seit heute Morgen scheint die Sonne aber in der Nacht wird keine Sonne mehr scheinen'; $string2 = preg_replace('/Sonne/', 'gelbe Kugel', $string, 1); ?>
Es geht auch mit str_replace, aber etwas umständlich:
$string = 'Seit heute Morgen scheint die Sonne aber in der Nacht wird keine Sonne mehr scheinen'; $suche = 'Sonne'; $ersetze = 'gelbe Kugel'; $pos = strpos($string, $suche); if ($pos !== false) { $string2 = substr_replace($string, $ersetze, $pos, strlen($suche)); }
Oder halt innerhalb einer Funktion, was die Sache schöner und logischer macht:
function str_freplace($search, $replace, $str) { $pos = strpos($str, $search); if ($pos === false) { return $string } return substr_replace($str, $replace, $pos, strlen($search)); } echo str_freplace('Seit heute Morgen scheint die Sonne aber in der Nacht wird keine Sonne mehr scheinen');
Beitrag zuletzt geändert: 8.5.2011 19:20:43 von fabo -
Hallo
vielen Dank
das mit preg_replace gefällt mir besser,
da kann ich bei Bedarf auch 2x ersetzen lassen
:)
PS: bei Aufruf der Funktion str_freplace hast Du die Parameter $search und $replace ganz vergessen ?!
:D
-
gewerbestart schrieb:
Hallo
vielen Dank
das mit preg_replace gefällt mir besser,
da kann ich bei Bedarf auch 2x ersetzen lassen
:)
PS: bei Aufruf der Funktion str_freplace hast Du die Parameter $search und $replace ganz vergessen ?!
:D
Ups Naja, so lange du das siehst... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage