array-Funktion, Element löschen, andere Elemente nachrücken

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • array-Funktion, Element löschen, andere Elemente nachrücken

    Hi,

    ich suche eine Arrayfunktion, die aus

    PHP-Code:
    <?php
    $queue 
    = array("Orange""Banane""Birne");
    array_TOLLE FUNKTION($queue"Banane");
    ?>
    Als Ergebnis will ich dann:

    PHP-Code:
    Array
    (
        [
    1] => Orange
        
    [2] => Birne

    Gibt es so eine Funktion? Hab jetzt schon einiges gefunden, aber nichts, was paßt.
    Ich möchte in einer Schleife verschiedene Elemente aus einem Array löschen und dann als Ergebnis z.B.

    "Dies ist ein langer Satz mit verschiedenen Worten und einem Punkt."

    Löschen: ein, einem, und

    ergibt: "Dies ist langer Satz mit verschiedenen Worten Punkt."

    Sieht derzeit so aus:

    PHP-Code:
    for($x=0;$x<=$anzahl;$x++)
    {
    if(
    in_array($sprach[$x],$frage))
    {
    $sprach[$x]='';
    }

    Jetzt will ich natürlich nicht an den Stellen der ersetzten Elemente "" stehen haben, sondern diese Elemente komplett rauslöschen und die anderen sollen nachrücken, so wie ganz oben beschrieben.

    Ich hoffe, das ist jetzt nicht zu verwirrend...

    danke schonmal und Grüße,
    Pust

  • #2
    array_diff()

    Kommentar


    • #3
      Hallo,

      das würde doch mit preg_replace viel einfacher gehen als über den Umweg mit dem Array, oder gibt es noch einen anderen Grund, der das Array notwendig macht?

      Beispiel:
      PHP-Code:
      $text preg_replace('<\\b(ein(e[mnrs]?)?|und|oder)\\b>i'''$text);
      $text preg_replace('< +>'' '$text); 
      Gruß,

      Amica
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        array_dif gibt mir die Unterschiede zurück.
        Ich will ein Element aber aus einem Array herauslöschen. Welches das ist, wird ja vorher schon definiert.

        Kommentar


        • #5
          PHP: array_splice - Manual
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            Ich brauche die arrays beide zur späteren Verarbeitung noch: Das Originale und das geänderte.

            Außerdem ist das, was aus dem Array gelöscht werden soll, ebenfalls in einem Array definiert.

            Ich gehe in der FOR-Schleife etwa so vor:

            Gehe $array solange durch, bis alle Elemente aus $array_such durchprobiert wurden.

            Da später ein Zähler durch die arrays geht, brauch ich die Elemente.

            Kommentar


            • #7
              splice sieht interessant aus, ich hab aber nicht rausgefunden, wie ein Element ganz herausgelöscht wird und die anderen nachrücken. Es sind immer irgendwie Ersetzungen im Manual als Beispiel.... Hab ich was übersehen?

              Edit:
              Hab auch gerade mit array_slice experimentiert, aber es gelingt mir nicht ZWISCHENraus ein ELement zu löschn
              Zuletzt geändert von Pust; 03.12.2009, 14:19.

              Kommentar


              • #8
                Zitat von Pust Beitrag anzeigen
                Hab ich was übersehen?
                Ja und zwar dass die letzten beiden Parameter in eckigen Klammern stehen. Das bedeutet, dass sie optional sind. Steht aber auch in der Erklärung der Parameter. Bitte demnächst erstmal richtig lesen.
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  Nein, hab schon gesehen, daß die optional sind. Ich hab mir auch die Beispiele angeschaut. Hat mir trotzdem bei meinem Problem nicht weitergeholfen.

                  Kommentar


                  • #10
                    PHP-Code:
                    $txt 'Dies ist ein langer Satz mit verschiedenen Worten und einem Punkt.';
                    $filter = array('ein''einem''und');

                    print_r(array_diff(explode(' '$txt), $filter)); 
                    Ist natürlich nur eine "Näherungslösung". Sobald eines der zu filternden Wörter nicht zwischen Leerzeichen steht, wird es nicht gefiltert.

                    Kommentar


                    • #11
                      Zitat von Pust Beitrag anzeigen
                      Hat mir trotzdem bei meinem Problem nicht weitergeholfen.
                      Warum nicht, wo hakt's denn?

                      PHP-Code:
                      $test = array("a""b""c""d");
                      // "c" soll gelöscht werden (Index 2):
                      array_splice($test21); 
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Kommentar


                      • #12
                        Zitat von Pust Beitrag anzeigen
                        Ich brauche die arrays beide zur späteren Verarbeitung noch: Das Originale und das geänderte.
                        array_filter()

                        Zitat von Pust Beitrag anzeigen
                        Außerdem ist das, was aus dem Array gelöscht werden soll, ebenfalls in einem Array definiert.
                        PHP-Code:
                        function filterkaffee($kaffee$filter) {
                            
                        $gefiltert = array ();
                            foreach (
                        $kaffee as $bohne) {
                                if (!
                        in_array($bohne$filterTRUE)) {
                                    
                        $gefiltert[] = $bohne;
                                }
                            }
                            return 
                        $gefiltert;
                        }

                        $kaffee = array ('jacobs''dallmayr''tchibo''melitta');
                        $filter = array ('melitta');
                        $gefiltert filterkaffee($kaffee$filter);

                        var_dump($kaffee);
                        var_dump($gefiltert); 
                        Für dein ursprüngliches Problem würde ich eine andere Lösung wählen:

                        PHP-Code:
                        $haystack 'Dies ist ein langer Satz mit verschiedenen Worten und einem Punkt.';
                        $filter = array ('ein''einem''und');

                        // ein kleines i am Ende macht den PCRE "case-insensitiv"
                        // und ein kleines u UTF-8-tauglich
                        $pcre '/(?<!\p{L})(\Q' implode('\E|\Q'$filter) . '\E)(?!\p{L})/';

                        $gefiltert preg_replace($pcre''$haystack);

                        var_dump($gefiltert); 
                        Zuletzt geändert von fireweasel; 03.12.2009, 15:01.
                        Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                        Kommentar


                        • #13
                          Ah ich Trottel!!

                          $test=array_splice($sprach,$x,1);

                          Gibt $test natürlich nur das zu löschende Wort aus!!

                          Okay, danke, so funktioniert es:

                          PHP-Code:

                          $sprach
                          ="dies ist wo ein langer satz";

                          $sprach explode(" "$sprach);

                          $frage = array("wer""wie""wo""was""warum""wozu""weshalb""woher");

                          $anzahl count($sprach);

                          for(
                          $x=0;$x<=$anzahl;$x++)
                          {
                          if(
                          in_array($sprach[$x],$frage))
                          {
                          $treffer=1;
                          array_splice($sprach,$x,1);
                          }
                          }

                          print_r ($sprach); 
                          Ergibt

                          Array ( [0] => dies [1] => ist [2] => ein [3] => langer [4] => satz )

                          Danke nochmal für die Hilfe!

                          Kommentar


                          • #14
                            Zitat von onemorenerd Beitrag anzeigen

                            Ist natürlich nur eine "Näherungslösung". Sobald eines der zu filternden Wörter nicht zwischen Leerzeichen steht, wird es nicht gefiltert.
                            Ja, das ist mir klar. Aber das muß ich riskieren, wenn ich per RegEx kurze Sachen wie "wo" rauslösche, wären ja z.B. auch Wörter wie "wort" kaputt oder wenn ich "der" raushaben will, würde aus "derzeit" nur noch "zeit"...

                            Darum denke ich, Leerzeichen sind noch am Sinnvollsten. Satzzeichen werden auch vorher entfernt.

                            Kommentar


                            • #15
                              Zitat von Pust Beitrag anzeigen
                              Aber das muß ich riskieren, wenn ich per RegEx kurze Sachen wie "wo" rauslösche, wären ja z.B. auch Wörter wie "wort" kaputt oder wenn ich "der" raushaben will, würde aus "derzeit" nur noch "zeit"...
                              Das ist nicht ganz richtig. Wenn du den Ausdruck (wie in meinem ersten Beispiel) an den Wortgrenzen verankerst (\b), passiert das nicht.
                              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                              Super, danke!
                              [/COLOR]

                              Kommentar

                              Lädt...
                              X