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

时间:2018-12-22 06:14:05

标签: php sub-array

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

为此,我在subarray内使用了foreach

代码在下面。

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***'
    };

我曾经使用过,但在这种情况下不起作用。因此,请告诉我在这种情况下它是如何工作的。预先感谢谁能解决我的问题。

2 个答案:

答案 0 :(得分: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();变量被写到范围之外,因此无论何时循环运行,它都会获取旧值

答案 1 :(得分:1)

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

  $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关键字用于将“额外”数据传递给函数,在声明后,普通自变量在执行时传递数据。 / p>

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

希望如此。

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

PS 别忘了将$row = array();放在另一个答案中提到的循环之外。

注意OR||之间也有区别,在这种情况下,它不适用,但是单词版本的优先级比布尔版本低,因此如果将两者混在一起,可能会出现事情超出预期的顺序。