我有循环,我必须检查我正在检索的数组不应该为空。如果为空,则不显示该字段。
$checkboxes = array();
$text = array();
$Enhanced = array();
$Search = array();
$Landing = array();
$spotlights="";
for ($i = 1; $i <= 20; $i++) {
$checkboxes[$i] = $_POST[$i];
$text[$i] = $_POST[$i.'t'];
}
for ($p = 1; $p <= 20; $p++) {
$checkboxes[$p] = $_POST[$p];
$Enhanced[$p] = $_POST['Enhanced'.$p];
}
for ($q = 1; $q <= 20; $q++) {
$checkboxes[$q] = $_POST[$q];
$Search[$q] = $_POST['Search'.$q];
}
for ($r = 1; $r <= 20; $r++) {
$checkboxes[$r] = $_POST[$r];
$Landing[$r] = $_POST['Landing'.$r];
}
for ($j = 1; $j <= 20; $j++) {
if($checkboxes[$j]!="")
{
$spotlights=$spotlights."<strong>".$checkboxes[$j]."</strong><br>".$Enhanced[$j]."<br>".$Search[$j]."<br>".$Landing[$j]."<br>".$text[$j]."<br><br>";
}
}
echo $spotlights;
在上面的代码中,$Enhanced[$j]
,$Search[$j]
,$Landing[$j]
可能为空,也可能不为空,因为它们是checkboxes
。如果它们中的任何一个是空的,我不想打印它。在上面的情况下,如果三个字段中的任何一个为空,那么它显示我不想要的<br/>
。
如果我逐一检查它们或它们的组合,那么我的代码会更长。
我如何以更智能的方式办理登机手续?我应该如何编写$spotlights=...
行,以便它只显示非空变量($Enhanced[$j]
,$Search[$j]
,$Landing[$j]
)?
我试过没有工作的bolow。 使用功能:
for ($j = 1; $j <= 20; $j++) {
if($checkboxes[$j]!="")
{
$spotlights=$spotlights."<strong>".$checkboxes[$j]."</strong>".enhanced($j).search($j).landing($j)."<br>".$text[$j]."<br><br>";
}
}
function enhanced($j) {
if($Enhanced[$j]!="")
{
return "<br/>".$Enhanced[$j];
}
}
function search($j) {
if($Search[$j]!="")
{
return "<br/>".$Search[$j];
}
}
function landing($j) {
if($Landing[$j]!="")
{
return "<br/>".$Landing[$j];
}
}
以上代码未显示$Enhanced[$j], $Search[$j], $Landing[$j]
独立检查值
for ($j = 1; $j <= 20; $j++) {
if($checkboxes[$j]!="")
{
$spotlights .= $spotlights."<strong>".$checkboxes[$j]."</strong>";
if($Enhanced[$j]!="")
{
$spotlights .= "<br>".$Enhanced[$j];
}
if($Search[$j]!="")
{
$spotlights .= "<br>".$Search[$j];
}
if($Landing[$j]!="")
{
$spotlights .= "<br>".$Landing[$j];
}
$spotlights .= "<br>".$text[$j]."<br><br>";
}
使用上面的代码重复了这些值。
答案 0 :(得分:1)
使用validates :start_date, presence: true, numericality: {greater_than: 0, message: " is an invalid value."}
。
这样的事情:
array_filter
$checkboxes = array_filter($checkboxes);
foreach($checkboxes as $checkbox)
{
$j = array_search($checkbox, $checkboxes)
$spotlights=$spotlights."<strong>".$checkboxes[$j]."</strong><br>".$Enhanced[$j]."<br>".$Search[$j]."<br>".$Landing[$j]."<br>".$text[$j]."<br><br>";
echo $spotlights;
}
会从数组中移除所有array_filter
,NULL
或false
,但会保留位置,因此如果您在''
中有不同的内容,在checkbox[3]
位于checkboxes
之后的array_filter
中,如果位置2为NULL
则无关紧要。
答案 1 :(得分:0)
我不认为单独检查它们会有很多麻烦,因为它们只有三个,但是如果你想保持一行,你用这个定义$ spotlights的那一行:
$spotlights=$spotlights."<strong>".$checkboxes[$j]."</strong>"
.($Enhanced[$j] != "" ? "<br>".$Enhanced[$j] : "")
.($Search[$j] != "" ? "<br>".$Search[$j] : "")
.($Landing[$j] != "" ? "<br>".$Landing[$j] : "")
."<br>".$text[$j]."<br><br>";
希望这会有所帮助。