Эхо HTML с PHP внутри

Помогите мне превратить это в динамическое, используя эхо с HTML и PHP, используя диапазон массивов

<?php $arr = array(1, 2, 3, 4); $selected='<img src="assets/images/resev.png" class="img-circle" width="40" height="40" />'; $aval='<img src="assets/images/aval.png" class="img-circle" width="40" height="40" />'; foreach ($arr as &$value) { <button class="btn btn-default" id=$value <?php if (isset($_SESSION['buttons']) && (in_array($value, $_SESSION['buttons']))){ ?> disabled <?php } ?> > <?php if (isset($_SESSION['buttons']) && (in_array($value, $_SESSION['buttons']))) { echo $selected ; } else { echo $aval ; } ?>$value </button> 

пока я это сделал

 <?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { echo '<button class="btn btn-default" id='. $value if (isset($_SESSION['buttons']) && (in_array($value, $_SESSION['buttons']))){ disabled }. '> //line 84 </button>' ; } ?> 

и я уже получаю

Ошибка анализа: ошибка синтаксического анализа в xyz.php в строке 84

Вы можете сделать так:

 <?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $disabled = ''; if(isset($_SESSION['buttons']) && (in_array($value, $_SESSION['buttons']))) { $disabled = 'disabled'; } echo '<button class="btn btn-default" id='.$value.' '.$disabled.'>Test Button</button>' ; } ?> 

Чтобы избежать таких проблем и ошибок в будущем, вы должны отделить свой код от блоков:

  1. Определить значения
  2. Вычислить динамические значения
  3. Включить шаблон
  4. Оценить шаблон

Как это:

Содержание index.php

 <?php // define $a = 1; $b = 2; $c = null; // value for fallback // calculate $c = $a + $b; // include template include_once 'template.phtml'; 

Содержимое template.phtml (шаблон оценки)

 <div> <p><?= $a ?></p> <p><?= $b ?></p> <?php if ($c !== null) { ?> <p><?= $c ?></p> <?php } else { ?> <p>$c variable has not calculated</p> <?php } ?> </div> 

Я не думаю, что вы можете вызвать оператор if внутри вашего вызова функции эха, вам нужно отделить их друг от друга, что-то, что можно попробовать:

 echo '<button class=\"btn btn-default\" id='. $value; if (isset($_SESSION['buttons']) && (in_array($value, $_SESSION['buttons']))) { echo 'disabled'; } echo '></button>' ; 

Объединение html и php с помощью эхо-заявлений может быстро стать грязным и нечитаемым.

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

 <?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) : ?> <button class="btn btn-default" id="<?=$value;?><?=((isset($_SESSION['buttons']) && (in_array($value, $_SESSION['buttons'])))?' disabled':''?>"> <?php if (isset($_SESSION['buttons']) && (in_array($value, $_SESSION['buttons']))) : ?> <img src="assets/images/resev.png" class="img-circle" width="40" height="40" /> <?php else : ?> <img src="assets/images/aval.png" class="img-circle" width="40" height="40" /> <?php endif; ?> </button> <?php endforeach; ?> 

Ошибка синтаксического анализа является результатом вашей попытки связать оператор if ($ value if …) с инструкцией echo, а также просто disabled вместо echo 'disabled' в вашем if if}.

(Отправлено от имени ОП).

Рабочий код:

  <?php $arr = array(1, 2, 3, 4, 5); foreach ($arr as &$value) { $disabled = ''; if(isset($_SESSION['buttons']) && (in_array($value, $_SESSION['buttons']))) { $disabled = 'disabled'; $image = $selected ; } else { $disabled = ''; $image = $aval ; } echo '<button class="btn btn-default" id='.$value.' '.$disabled.'>' .$image.' '.$value.'</button>' ; } ?> 

Помимо читаемости, проблему можно устранить следующим образом:

 $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { echo '<button class="btn btn-default" id="'. $value . '" ' . ((isset($_SESSION['buttons']) && in_array($value, $_SESSION['buttons'])) ? 'disabled="disabled"' : '') . '>test</button>'; } 

Здесь я использовал так называемый ternary operator .

Вот оно, но немного яснее:

 $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { echo '<button class="btn btn-default" id="'. $value . '" ' . ( (isset($_SESSION['buttons']) && in_array($value, $_SESSION['buttons'])) ? 'disabled="disabled"' : '' ) . ' >test</button>'; } 

Тернарный оператор похож на оператор if, но обычно используется для встроенных вещей.

Синтаксис таков:

 $myVar = (expression ? true : false); 

Вот пример того, как получить «Woo!» когда число равно 1.

 $number = 1; $wooOrNe = ($number === 1 ? "Woo!" : "Ne."); // Woo!