Как передать ifstament в subarray внутри цикла foreach
Я хочу пройти 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 ответа
Упрости
<?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
use
Ключевое слово используется для передачи "лишних" данных в функцию, когда она объявлена, обычные аргументы передают данные, когда она выполняется.
В целом это был бы плохой способ реализовать это, я просто хотел показать это как вариант. Главным образом это будет плохо от обслуживания и читаемости / стандартизации типа кадра. Под этим я подразумеваю, что было бы хорошо, если бы все элементы в массиве имели одинаковые базовые входные данные, а все обратные вызовы. Проблема заключается в сопоставлении аргументов с элементами массива, которые вы не можете получить, какого типа элемент находится в массиве (функция, HTML и т. Д.), И у вас не будет возможности узнать аргументы заранее. Если вы должны были смешивать типы и аргументы среди различных обратных вызовов.
Надеюсь, что это имеет смысл.
Во всяком случае, в некоторых ситуациях это может быть отличным способом сделать полиморфное поведение.
PS не забудьте поставить $row = array();
вне цикла, как указано в другом ответе.
Обратите внимание, что есть также разница между OR
а также ||
в данном случае это не применимо, но слово "версия" имеет более низкий приоритет, чем булева версия, так что вы можете столкнуться с ситуацией, когда все выходит из порядка, которого вы ожидаете, если вы смешаете их.