请帮我把它变成动态使用echo与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>' ;
}
?>
我已经得到
解析错误:解析第84行xyz.php中的错误
为了避免将来出现这样的问题和错误,您必须将代码块分开:
- 定义值
- 计算动态值 <
- 包括模板/gh><
- 评估模板/gh>
:
index . php内容<?php
// define
$a = 1;
$b = 2;
$c = null; // value for fallback
// calculate
$c = $a + $b;
// include template
include_once 'template.phtml';
模板。php内容(求值模板)
<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>
您可以按以下方式操作-
<?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>' ;
}
?>
我不认为你可以在你的echo函数调用中调用if语句,你需要将它们彼此分开,可以尝试这样做:
echo '<button class='"btn btn-default'" id='. $value;
if (isset($_SESSION['buttons']) && (in_array($value, $_SESSION['buttons'])))
{
echo 'disabled';
}
echo '></button>' ;
使用echo语句组合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; ?>
解析错误是由于您试图用echo语句链接if语句($value if…),并且在if{}语句中也只是使用disabled
而不是echo 'disabled'
。
(代表OP发布)
工作代码:
<?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);
这里有一个例子,当一个数字是1时,如何得到"Woo!"
$number = 1;
$wooOrNe = ($number === 1 ? "Woo!" : "Ne."); // Woo!