Ankündigung

Einklappen
Keine Ankündigung bisher.

Arrayelement teilweise löschen

Einklappen

Neue Werbung 2019

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

  • Arrayelement teilweise löschen

    Hallo Community,

    ich habe in Array aus Strings. ich möchte aus den einzelnen Elementen einzelne Teile löschen.

    Bsp. hostnames
    Code:
    array(3) {
      [0]=>
      string(64) "/omd/sites/test/conf.d/objects/Testrechner/test1.cfg:define host{"
      [1]=>
      string(63) "/omd/sites/test/conf.d/objects/Testrechner/test2.cfg:define host{"
    [43]=>
      string(68) "/omd/sites/test/conf.d/objects/test1/netzwerk/chip2.cfg:define host{"
    Ich würde gern alles bis auf den Filename löschen.

    Hab folgendes probiert:
    PHP-Code:
    <?php
    class read{
    function 
    read1()  
    {
    foreach(
    $hostnames as $key => $value)
    {
    preg_replace('/:define host{/',' ' ,$value);
    }
        
    return(
    $hostnames);
    }
    }
    Leider brachte dies nicht den gewünschten Erfolg.

    Wäre für Hilfe dankbar.


  • #2
    Schneide alles ab (und inklusive) dem Doppelpunkt weg. Anschliessend pathinfo()...
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      PHP-Funktionen arbeiten nunmal nicht nach eigenen Wunschvorstellungen, sondern so wie es im Manual steht.
      Hier : preg_replace
      Diese hat einen Rückgabewert, den gilt es richtig zu verarbeiten.
      PHP-Klassen auf github

      Kommentar


      • #4
        Und mach bitte die Klasse da weg ... Und Funktionen besitzen nicht umsonst Parameter, sondern dafür dass man die auch benutzt und so den array übergibt ...
        [CENTER]Regenwaldschutz: [URL=http://www.ecosia.org/][COLOR="Green"]Ecosia - Die grüne Suchmaschine[/COLOR][/URL]
        [/CENTER]

        Kommentar


        • #5
          Die gepostete Funktion ist nur ein Auschnitt.

          Die komplette Funktion lautet:
          PHP-Code:
              function read($sitename)  
              {
              
                  
          $path "/opt/omd/sites/{$_POST['sitename']}/etc/nagios/conf.d/objects";  
              
                  
          $string='host{';

                  
          $shellCommand =  "grep -r '$string$path";

                  
          exec($shellCommand$hostnames);
                  
                  foreach(
          $hostnames as $key => $value)
                  {
                      
          preg_replace('/:define host{/',' ' ,$value);  //preg_replace no effect
                  
          }
                  
                  return(
          $hostnames);

              } 
          Das Array wir mittels "exec()" erst erzeugt.

          Kann mein Problem eventuell daran liegen, dass "foreach()" nur mit Referenzen auf die Arrayelemente arbeitet?

          Kommentar


          • #6
            Schreib einen kleinen Parser, was du da hast ist alles Bullshit und Fehleranfällig. Sorry! (nicht mit regex)
            Neu bei PHP, lerne aktuell OOP

            Kommentar


            • #7
              @NewbieJoker:

              Meine PHP- bzw. Programmierkenntnisse sind leider zu gering, als dass ich mir mal nen eigenen Parser schreiben könnte.
              Die funktionsweise von Parsern ist mir prinzipiell bekannt, aber so etwas zu programmieren is nochmal ne wesentlich höhere Hürde.

              Allerdings finde deinen Ansatz mit dem Parser so gut, dass er mir nicht mehr aus dem Kopf geht.

              Werd´s versuchen umzusetzen.

              Kommentar


              • #8
                PHP-Code:
                $a = array(
                  
                0=> "/omd/sites/test/conf.d/objects/Testrechner/test1.cfg:define host{",
                  
                1=> "/omd/sites/test/conf.d/objects/Testrechner/test2.cfg:define host{",
                 
                43=> "/omd/sites/test/conf.d/objects/test1/netzwerk/chip2.cfg:define host{"
                 
                );
                 
                foreach(
                $a as $key => $value) { 
                    
                $i strpos($value':');
                    if (
                false !== $i) {
                        
                $a[$key] = substr($value0$i);
                    }

                 
                var_dump($a); 
                Code:
                array(3) {
                  [0]=>
                  string(52) "/omd/sites/test/conf.d/objects/Testrechner/test1.cfg"
                  [1]=>
                  string(52) "/omd/sites/test/conf.d/objects/Testrechner/test2.cfg"
                  [43]=>
                  string(55) "/omd/sites/test/conf.d/objects/test1/netzwerk/chip2.cfg"
                }
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar


                • #9
                  Zitat von harrier Beitrag anzeigen
                  Die gepostete Funktion ist nur ein Auschnitt.
                  Ist das das Highlight oder geht das so weiter? Du verwendest $_POST ungefiltert in exec()...

                  Schau mal dort: http://sourceforge.net/projects/naupy/ das kannst du als inspiration oder gleich komplett nutzen.

                  Kommentar


                  • #10
                    @erc:Ich schau mir´s mal an.

                    Danke

                    Die Klasse enthält noch mehr Funktionen, welche aber nicht mit der geposteten im Zusammenhang stehen.

                    Kommentar

                    Lädt...
                    X