如何将 if else 语句传递给 foreach 循环内的子数组

how to pass if else statment to subarray inside foreach loop

我想用 html 数据传递 if,else 条件。目的是检查 if session 等于“master” 然后 "allow access" else "access blocked".

为此,我在 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 
$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(); 变量被写出范围,所以每当循环 运行 它获取旧值

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

  $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关键字用于将"extra"数据传入函数声明时,普通参数在[=38]时传入数据=]执行.

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

希望这是有道理的。

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

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

注意 OR|| 也有区别,在这种情况下它不适用,但单词 version 的优先级较低布尔版本,因此如果将两者混合,您可能会遇到 运行 超出预期顺序的情况。