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

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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()

    Comment


    • #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]

      Comment


      • #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.

        Comment


        • #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]

          Comment


          • #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.

            Comment


            • #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
              Last edited by Pust; 03-12-2009, 13:19.

              Comment


              • #8
                Originally posted by Pust View Post
                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]

                Comment


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

                  Comment


                  • #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.

                    Comment


                    • #11
                      Originally posted by Pust View Post
                      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]

                      Comment


                      • #12
                        Originally posted by Pust View Post
                        Ich brauche die arrays beide zur späteren Verarbeitung noch: Das Originale und das geänderte.
                        array_filter()

                        Originally posted by Pust View Post
                        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); 
                        Last edited by fireweasel; 03-12-2009, 14:01.
                        Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                        Comment


                        • #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!

                          Comment


                          • #14
                            Originally posted by onemorenerd View Post

                            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.

                            Comment


                            • #15
                              Originally posted by Pust View Post
                              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]

                              Comment

                              Working...
                              X