как передать ifstament в subarray внутри цикла foreach - PullRequest
0 голосов
/ 22 декабря 2018

Я хочу передать if,else условие с html данными.Цель состоит в том, чтобы проверить if session равно " master ", затем "разрешить доступ" 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 голосов
/ 22 декабря 2018

Вы можете использовать функцию обратного вызова вместо:

  $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

Песочница

Ключевое слово use используется для передачи «дополнительных» данных в функцию , когда она объявлена ​​, обычные аргументы передают данные, когдаэто выполнено .

В целом, это плохой способ реализовать его, я просто хотел показать его как вариант.Главным образом это будет плохо от обслуживания и читаемости / стандартизации типа кадра.Под этим я подразумеваю, что было бы хорошо, если бы все элементы в массиве имели одинаковые базовые входные данные и в них все обратные вызовы.Проблема заключается в сопоставлении аргументов с элементами массива, которые вы не можете получить, какого типа элемент находится в массиве (функция, HTML и т. Д.), И у вас не будет возможности узнать аргументы заранее.Если вам нужно смешивать типы и аргументы между различными обратными вызовами.

Надеюсь, это имеет смысл.

В любом случае, в некоторых ситуациях это может быть отличным способом для полиморфного поведения.

PS не забудьте поставить $row = array(); вне цикла, как указано в другом ответе.

Примечание также естьразница между OR и ||, в данном случае это не применимо, но версия слова имеет более низкий приоритет, чем булева версия, поэтому вы можете столкнуться с ситуацией, когда все идет не так, как вы ожидаете, если вы смешаете два.

0 голосов
/ 22 декабря 2018

Упростите

<?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(); выводится из области видимости, поэтому при каждом запуске цикла она получает старые значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...