是否可以在基于 PHP $variable的表中只显示一个 JSON 对象?

Is it possible to display only one JSON object in a table based on a PHP $variable?

提问人:CoolColon 提问时间:7/29/2023 最后编辑:CoolColon 更新时间:7/29/2023 访问量:34

问:

我有一个表格,它使用 foreach() 显示数组中的每个对象。我想要一个搜索栏,可以过滤表格,只显示一个对象及其信息。我已经为每个键使用这个系统实现了这一点:

$searchname = $_SESSION["searchname"];
if($contents["attributes"]["Description"] == $searchname) {
    $description = $contents["attributes"]["Description"];
} 
else {
    $description = '';
}

但是,这会将每隔一行留空,但由于 else {''},仍将其打印为一行。

我试过用这个问题中的一些 JavaScript 查询隐藏每个“空”行

deleteEmptyRows();
function checkIfCellsAreEmpty(row) {
  var cells =  row.cells;
  var isCellEmpty = false;
  for(var j = 0; j < cells.length; j++) {
    if(cells[j].innerHTML !== '') {
      return isCellEmpty;
    }
  }
  return !isCellEmpty;
}
function deleteEmptyRows() {
  var myTable = document.getElementById("myTable");
  for(var i = 0; i < myTable.rows.length; i++) {
    var isRowEmpty = checkIfCellsAreEmpty(myTable.rows[i]);
    if (isRowEmpty) {
     myTable.rows[i].style.display = "none";
    }
  }
}

但这似乎也不起作用,每一行仍在显示。

if(isset($_POST['submit_search']) && !empty($_POST['submit_search'])) {
        $_SESSION["searchname"] = $_POST['submit_search'];
    }
$json = json_decode($buffer, true);
     $info = $json["features"];
     
     ?><div><table id="myTable"><tr><th>Beach Name</th><th>Patrolled by</th><th>Patrol freq</th><th>Updated</th></div><?php
     foreach ($info as $contents){
            $searchname = $_SESSION["searchname"];
            if($contents["attributes"]["Description"] == $searchname) {
                $description = $contents["attributes"]["Description"];
            } 
            else {
                $description = '';
            }
            if($contents["attributes"]["Description"] == $searchname) {
                $patrolledby = $contents["attributes"]["PatrolledBy"];
            } 
            else {
                $patrolledby = '';
            }
            if($contents["attributes"]["Description"] == $searchname) {
                $mil = $contents["attributes"]["last_edited_date"];
                $seconds = $mil / 1000;
                $date = date("d/m/Y", $seconds);
            } 
            else {
                $date = '';
            }
            if($contents["attributes"]["Description"] == $searchname) {
                $patrolfreq = $contents["attributes"]["PatrolFrequency"];
            } 
            else {
                $patrolfreq = '';
            }
           
            print("<table>");
            printf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>", $description, $patrolledby, $patrolfreq, $date);
            print("</table>");
        }
    }

现在,在搜索了“Mooloolaba Beach”海滩之后,我留下了类似的东西:

海滩名称 巡逻者
穆卢拉巴海滩(Mooloolaba Beach) 理事会
穆卢拉巴海滩(Mooloolaba Beach) 昆士兰冲浪救生

我也在 if() 查询中尝试了 isset() 和 !empty(),但似乎 isset() 不适用于“==”运算符。

有没有办法隐藏这些空行,或者只是从一开始就阻止它们打印?

php json 变量 show-hide isset

评论

0赞 BadZen 7/29/2023
请发布您的代码,尤其是您描述的尝试的变体。
0赞 CoolColon 7/29/2023
@BadZen 谢谢,经过编辑以包含正在使用的所有相关代码。
1赞 Mohammad Salehi 7/29/2023
@CoolColon使用那个点赞按钮,而不仅仅是说谢谢。
0赞 Tangentially Perpendicular 7/29/2023
它没有显示您的数据来自哪里,但显而易见的解决方案是在创建原始 JSON 时省略不需要的行。

答:

0赞 Fabien TheSolution 7/29/2023 #1

我建议你只有一个 IF 条件,因为它在每种情况下都是相同的,然后将所有变量赋值放入其中。然后,您还可以在循环外部为表插入 in this condition 和 both,以避免为每次迭代创建一个表。printfIFprint

 print("<table>");
 foreach ($info as $contents){
        $searchname = $_SESSION["searchname"];
        if($contents["attributes"]["Description"] == $searchname) {
            $description = $contents["attributes"]["Description"];
            $patrolledby = $contents["attributes"]["PatrolledBy"];
            $mil = $contents["attributes"]["last_edited_date"];
            $seconds = $mil / 1000;
            $date = date("d/m/Y", $seconds);
            $patrolfreq = $contents["attributes"]["PatrolFrequency"];
            printf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>", $description, $patrolledby, $patrolfreq, $date);           
        } 
    }
 print("</table>");

评论

1赞 CoolColon 7/29/2023
救星!这很快解决了这个问题,我现在看到多个“if”语句导致了不必要的处理,我可以摆脱这些处理。非常感谢您的帮助!