kostenloser Webspace werbefrei: lima-city


externe Variable (array) in funktion ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    g**********t

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    g**********t

    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
  5. 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.
  6. Autor dieses Themas

    g**********t

    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
  7. 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
  8. Autor dieses Themas

    g**********t

    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 :megarofl:
  9. 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 :megarofl:


    Ups :wall: Naja, so lange du das siehst... :sound:
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!