【问题标题】:how to pass if else statment to subarray inside foreach loop如何将if else语句传递给foreach循环内的子数组
【发布时间】:2019-05-22 10:31:45
【问题描述】:

我想用html 数据传递if,else 条件。目的是检查if session 等于“ma​​ster”然后“允许访问”else“访问被阻止”。

为此,我在foreach 中使用subarray

代码如下。

foreach ($list as $po_invoice) {
      $no++;
      $row = array();
      $row[] = $no;
      $row[] = $po_invoice->po_code;
      $row[] = $po_invoice->invoice_code;

      $row[]='if else here';

      $row[]='<ul class="dropdown-menu">
               <li><input type="button" class="w3-button w3-block w3-teal edit" value="Edit" id="'.$po_invoice->id.'"></li>
               <li><input type="button" class="w3-button w3-block w3-red  delete" value="Delete" id="'.$po_invoice->id.'"></li>
             </ul>



      $data[] = $row;
    }

我想在这里使用if-else

$row[]= 'if ($id->type=='super_user' OR $id->type=='user') 
    {
    echo "<span class='w3-text-red fa fa-warning '>  Access Forbidden</span>";
    } else {
    '*Some Html Here***'
    };

我使用过,但在这种情况下不起作用。所以请告诉我它在这种情况下是如何工作的。提前感谢谁会解决我的问题。

【问题讨论】:

    标签: php sub-array


    【解决方案1】:

    简单一点

    <?php 
    $row = array();
    foreach ($list as $po_invoice) {
          $no++;
    
          $row[] = $no;
          $row[] = $po_invoice->po_code;
          $row[] = $po_invoice->invoice_code;
    
         if ($id->type=='super_user' OR $id->type=='user') 
         {
            $row[] = "<span class='w3-text-red fa fa-warning '>  Access Forbidden</span>";
         }else{
    
            $row[]='<ul class="dropdown-menu">
                   <li><input type="button" class="w3-button w3-block w3-teal edit" value="Edit" id="'.$po_invoice->id.'"></li>
                   <li><input type="button" class="w3-button w3-block w3-red  delete" value="Delete" id="'.$po_invoice->id.'"></li>
                 </ul>';
         }
    
          $data[] = $row;
    }
    

    并且$row = array(); 变量被写入范围之外,因此每当循环运行时,它都会获取旧值

    【讨论】:

      【解决方案2】:

      您可以使用函数回调代替:

        $row[]='if else here';
      
        $row[]='<ul class="dropdown-menu">
                 <li><input type="button" class="w3-button w3-block w3-teal edit" value="Edit" id="'.$po_invoice->id.'"></li>
                 <li><input type="button" class="w3-button w3-block w3-red  delete" value="Delete" id="'.$po_invoice->id.'"></li>
               </ul>';
      

      你可以这样做:

        $row[]=function($id) use ($po_invoice) {
          if ($id->type=='super_user' OR $id->type=='user'){ 
              echo '<ul class="dropdown-menu">
                        <li><input type="button" class="w3-button w3-block w3-teal edit" value="Edit" id="'.$po_invoice->id.'"></li>
                        <li><input type="button" class="w3-button w3-block w3-red  delete" value="Delete" id="'.$po_invoice->id.'"></li>
               </ul>';
           }else{
               echo '';
           }
       };
      

      然后在稍后你只需这样做:

       $row($id);  //or $row[0]($id); or what have you
      

      Sandbox

      use 关键字用于在声明时将“额外”数据传递给函数,普通参数在执行时传递数据。

      总的来说,这将是一种糟糕的实现方式,我只是想将其作为一个选项来展示。主要是维护和可读性/标准化类型的框架会很差。我的意思是,如果数组中的所有项目都具有相同的基本输入并且所有回调都在其中,那就没问题了。问题是将参数与数组项匹配,而您没有授予数组中的项目类型(函数、html 等),并且您无法提前知道参数。如果您要在各种回调中混合类型和参数。

      希望这是有道理的。

      无论如何,在某些情况下,它可能是进行多态行为的好方法。

      PS不要忘记将 $row = array(); 放在循环之外,如另一个答案中所述。

      注意OR|| 之间也有区别,在这种情况下它不适用,但单词版本的优先级低于布尔版本,所以你可以有一个如果您将两者混合在一起,事情就会超出您预期的顺序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-11
        • 1970-01-01
        • 2019-12-12
        • 2012-09-02
        • 2015-10-28
        • 2020-05-15
        • 2020-03-20
        • 2014-09-15
        相关资源
        最近更新 更多