代码之家  ›  专栏  ›  技术社区  ›  Jens Törnell

PHP-缩短嵌套if语句的输出

  •  -4
  • Jens Törnell  · 技术社区  · 7 年前

    <?php
    foreach($items as $item) {
      if($item['key']) {
        echo 'Alright';
    
        if($item['value']) {
          echo 'Inside';
        } else {
          $output[] = [
            $item['data1'],
            $item['data2'],
          ];
        }
      } else {
        $output[] = [
          $item['data1'],
          $item['data2'],
        ];
      }
    }
    
    print_r($output);
    

    如您所见,我使用嵌套的if语句。令我烦恼的是,我在这两个方面都有相同的输出 else . 我宁愿把东西晾干。

    我真正的代码有点复杂。

    foreach($out as $i => $data) {
      $dayshort = mb_substr($data[0], 0, 3);
    
      if(isset($out[$i+1][0])) {
          $future = $out[$i+1][0];
    
          $daykey = array_search($data[0], $weekdays);
          $nextday = $weekdays[$daykey + 1];
    
          if($nextday != $future) {
              $backkey = array_search($future, $weekdays) - 1;
              $backname = mb_substr($weekdays[$backkey], 0, 3);
    
              $final[] = [
                  $dayshort . ' - ' . $backname,
                  $data[1],
                  $data[2]
              ];
          } else {
              $final[] = [
                  $data[0],
                  $data[1],
                  $data[2]
              ];
          }
      } else {
          $final[] = [
              $data[0],
              $data[1],
              $data[2]
          ];
      }
    }
    

    https://github.com/jenstornell/daybreaker

    3 回复  |  直到 7 年前
        1
  •  1
  •   user2575725 user2575725    7 年前
    foreach($out as $i => $data) {
      $dayshort = mb_substr($data[0], 0, 3);
      $result = $data[0]; /* default case value */
    
      if (isset($out[$i + 1][0])) {
         $future = $out[$i + 1][0];
         $daykey = array_search($data[0], $weekdays);
         $nextday = $weekdays[$daykey + 1];
    
         if ($nextday != $future) {
             $backkey = array_search($future, $weekdays) - 1;
             $backname = mb_substr($weekdays[$backkey], 0, 3);
             $result = $dayshort.' - '.$backname; /* overrite here */
         }
      }
     /* just once */
      $final[] = [
        $result,
        $data[1],
        $data[2]
      ];
    }
    
        2
  •  0
  •   Josep Widtantio    7 年前

    我觉得更简单

    <?php
    foreach($items as $item) {
      if($item['key']) {
        echo 'Alright';
    
        if($item['value'])
          echo 'Inside';
      }
      $output[] = [
        $item['data1'],
        $item['data2'],
      ];
    }
    
        3
  •  0
  •   ABHI    7 年前

    您可以为其他部分初始化变量,如

    $is_false=0;

    请参阅下面的代码。

    <?php
    foreach($items as $item) {
        if($item['key']) {
            echo 'Alright';
            if($item['value']) {
                echo 'Inside';
            } else {
                $is_false = 1;
            }
        }else{
            $is_false = 1;
        }
    
        if($is_false==1){
            $output[] = [
            $item['data1'],
            $item['data2'],
            ];
        }
    }    
    print_r($output);