eval(), preg_replace

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

  • eval(), preg_replace

    PHP-Code:
    <?
    function GetShips($str)
    {
    $str = preg_replace('!Medusa (.*?) !','$medusa=$1; ',$str);
    $str = preg_replace('!Banshee (.*?) !','$banshee=$1; ',$str);
    $str = preg_replace('!Incubus(.*?) !','$incubus=$1; ',$str);

    return $str;
    }

    eval (GetShips('Medusa 46 Incubus 26'));
    echo $banshee;
    ?>
    ich hab da mal ausprobiert was zu machen, hat aber ned geklappt...
    wie kann ich aus 'Medusa 46 Incubus 26' '$medusa=46; $incubus=26;' machen?

  • #2
    PHP-Code:
    $string='Medusa 46 Incubus 26';
    $array=explode(' '$string);
    for (
    $i=0;$i<count($array)-1;$i+=2)
      ${
    $array[$i]}=$array[$i+1];
    echo 
    $Medusa.'--'.$Incubus
    so?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      pattern:
      Medusa ([0-9]*)

      string:
      Medusa 8934238423 Incubus 26

      match:
      start=0, end=17
      Group(0) = Medusa 8934238423
      Group(1) = 8934238423

      Kommentar


      • #4
        Vielen Dank für eure Antworten! Ich hab jetzt schon eher an so was wie das zweite gedacht, aber je nach dem Fall ist die erste ne geniale Lösung!

        Jetzt sieht das ganze allerdings etwas sperrig aus, und irgendwie wollts mit arrays auch ned recht klappen... irgend ne ahnung wie man das etwas kompakter gestalten kann?

        PHP-Code:
        <?
        $string = 'Ships (882 total) 
        Banshee 300     Revenant 200 
        Medusa 300     Incubus 20 
        Hades 20     Cerberus 20 
        Vesuvius 22 
        ';

        preg_match("/Medusa ([0-9]*)/", $string, $Medusa);
        preg_match("/Banshee ([0-9]*)/", $string, $Banshee);
        preg_match("/Incubus ([0-9]*)/", $string, $Incubus);
        /* usw... */

        echo $Medusa[1];
        echo $Banshee[1];
        echo $Incubus[1];
        /* usw... */
        ?>

        Kommentar


        • #5
          PHP-Code:
          preg_match_all('%([a-z]*)[ ]*([0-9]*)%i'$string$array);
          $schiffe=array();
          for (
          $i=0;$i<count($array[1]);$i++)
              if (!empty(
          $array[1][$i]))
                  
          $schiffe[$array[1][$i]]=$array[2][$i];
          echo 
          '<pre>';
          print_r($schiffe);
          echo 
          '</pre>'
          sollte klappen, wenn du aus (882 total) nur 882 machst, wenn das nicht geht, kriegst du die gesamtzahl nicht, den rest schon
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Ich hab jetzt mal das folgende script gemacht:

            PHP-Code:
            $string 'Ships (1160 total) 
            Banshee 140     Revenant 300 
            Medusa 210     Incubus 160 
            Hades 100     Cerberus 100 
            Vesuvius 150
            '
            ;

            preg_match_all("/([a-z]*) ([0-9]*) ([a-z]*) ([0-9]*) /is"$string $ships);

            echo 
            '<table width="400" border="0" cellspacing="0" cellpadding="0">';
            for (
            $i=0$i<count($ships[0]); $i++){
                    echo 
            '<tr><td>'.$ships[1][$i].'</td><td>'.$ships[2][$i].'</td><td>'.$ships[3][$i].'</td><td>'.$ships[4][$i].'</td></tr>';
            }
            echo 
            '</table>'
            Eigentlich will ich erreichen dass es gleich wunderschön in ner Tabelle angezeigt wird, immer zwei ships nebeneineander, und überflüssige Teile wie das Total sollen nicht angezeigt werden. Das Resultat sieht aber so aus:

            Code:
            <table width="400" border="0" cellspacing="0" cellpadding="0">
            <tr><td>Banshee</td><td>140</td><td></td><td></td></tr>
            <tr><td></td><td></td><td>Revenant</td><td>300</td></tr>
            <tr><td>Medusa</td><td>210</td><td></td><td></td></tr>
            <tr><td></td><td></td><td>Incubus</td><td>160</td></tr>
            <tr><td>Hades</td><td>100</td><td></td><td></td></tr>
            <tr><td></td><td></td><td>Cerberus</td><td>100</td></tr>
            </table>
            Irgendwie nimmt es jegliche lücken auch noch, aber so bald ich was mit + oder mindestanzahl machen will, spinnt es irgendwie

            Kann da jemand helfen?

            Kommentar


            • #7
              PHP-Code:
              $i<count($ships[0]); 
              so lange $i kleiner ist als die länge des wortes im array-element nummer null - welchen sinn soll denn das machen?

              und was sollen in der schleife die zugriffe auf $ships[1][$i], $ships[2][$i], $ships[3][$i] und $ships[4][$i] - ist dein array, dass preg_match_all zurückliefert, denn überhaupt zweidimensional?

              lass dir nach dem preg_match_all dein array mal zur kontrolle mit print_r() ausgeben, dann siehst du ja, was da drin steht und wo.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar

              Lädt...
              X