Ankündigung

Einklappen
Keine Ankündigung bisher.

variablen verknüpfen in eine foreach schleife

Einklappen

Neue Werbung 2019

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

  • variablen verknüpfen in eine foreach schleife


    kann mir jemand sagen wo mein Gedankenfehler ist! Ich versuche aus einem String zwei Zahlen zu trennen und sie zu ergänzen mit range(). Anschließend das Ergebniss in einen einzigen array ausgeben.

    PHP-Code:
    // Beispiels string für $arr[3] = (1 - 9, 11 - 12, 16 - 17, 20 - 22, 24 - 25, 34 - 37, 39 - 42);

    $nice $arr[3];

    $arr2 explode(","$nice);
    foreach (
    $arr2 as $val1) {
    if (
    strpos($val1' - ') != FALSE) {

    $val1 trim($val1);
    $str1 substr($val102);
    $str2 substr($val1, -2);

    $nice range($str1$str2);
    print_r($nice);
    foreach (
    $nice as $nice_neu) {

    $nice_fin .= ", " $nice_neu;

    }
    }

    sollte es so ausgegeben werden:
    1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 16, 17, 20, 21, 22, 24, 25, 34, 35, 36, 37, 39, 40, 41, 42

    tut es aber nicht, das Resultat sieht so aus:
    nice neu:, 35, 36, 41, 42, 35, 36, 41, 42, 41, 42, 41, 42, 35, 36, 38, 39, 35, 36, 41, 42, 1
    nice neu:, 35, 36, 41, 42, 35, 36, 41, 42, 41, 42, 41, 42, 35, 36, 38, 39, 35, 36, 41, 42, 1, 2
    nice neu:, 35, 36, 41, 42, 35, 36, 41, 42, 41, 42, 41, 42, 35, 36, 38, 39, 35, 36, 41, 42, 1, 2, 3
    und so weiter ...

    danke für jede Hilfe!

  • #2
    Was sagt denn das print_r() ?

    Kommentar


    • #3
      Ähm, versteh ich nicht ganz.. Dh:

      Du hast folgendes als Input:
      PHP-Code:
      $s "1 - 9, 11 - 12, 16 - 17, 20 - 22, 24 - 25, 34 - 37, 39 - 42"
      Und willst als Ergebnis:
      Code:
      1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 16, 17, 20, 21, 22, 24, 25, 34, 35, 36, 37, 39, 40, 41, 42
      Also sowas? Oder wie meinst du?
      PHP-Code:
      $s "1 - 9, 11 - 12, 16 - 17, 20 - 22, 24 - 25, 34 - 37, 39 - 42";

      $aOut = [];
      $outSeparator ', ';
      $a explode(', '$s);

      foreach (
      $a as $val) {
          
      $aParts explode(' - '$val);
          
      $aOut[] = implode($outSeparatorrange($aParts[0], $aParts[1]));
      }

      echo 
      implode($outSeparator$aOut);
      // 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 16, 17, 20, 21, 22, 24, 25, 34, 35, 36, 37, 39, 40, 41, 42 
      Warum das komische Input-Format?

      Und bitte Code-Tags hier im Forum nutzen. Danke!

      Kommentar


      • #4
        oder so
        PHP-Code:
        $test '1 - 9, 11 - 12, 16 - 17, 20 - 22, 24 - 25, 34 - 37, 39 - 42';
        $newArray = array();
        foreach (
        explode(',',$test) as $val
            
        $newArray array_merge($newArrayrange(explode('-',$val)[0] ,explode('-',$val)[1]));
        print_r($newArray); 

        Kommentar


        • #5
          PHP-Code:
          $ranges '(1 - 9, 11 - 12, 16 - 17, 20 - 22, 24 - 25, 34 - 37, 39 - 42)';

          $splittedRanges explode(','trim($ranges'()'));

          $tuples array_map(
              function (
          $range) {
                  
          $splittedRange explode('-'$range);
                  return 
          range((int)$splittedRange[0], (int)$splittedRange[count($splittedRange) === 1]);
              },
              
          $splittedRanges
          );

          $mergedTuples call_user_func_array('array_merge'$tuples);

          echo 
          implode(', '$mergedTuples);
          // 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 16, 17, 20, 21, 22, 24, 25, 34, 35, 36, 37, 39, 40, 41, 42 

          Kommentar


          • #6
            Und weil's gerade so schoen ist, noch eine Variante mit array_reduce()

            PHP-Code:
            $ranges '1, 11 - 12, 16 - 17, 20 - 22, 24 - 25, 34 - 37, 39 - 42';

            $splitRanges explode(','$ranges);

            $tuples array_map(
                function(
            $range) {
                    
            $split explode('-'$range);
                    return 
            range(reset($split), end($split));
                },
                
            $splitRanges
            );

            $merged array_reduce($tuples'array_merge', []);

            echo 
            implode(', '$merged); 

            Kommentar

            Lädt...
            X