php - in_array 值是唯一值。如何?
问题描述
下面系列中的第二个 if 语句不断返回 true 并打印出即使estimateId
不是数组中的唯一项。我该如何纠正?
目标是确保在下面的系列中始终只有一个 if 语句匹配。
例如,现在第二个 if 在第三个 if 的情况下返回 true。这不应该发生。
https://localhost/data.php?estimateId=1001
https://localhost/data.php?estimateId=1001&proposalsFilter=all
.
<?php
# estimates/active/
if (in_array($_GET["estimatesFilter"], $_GET)) {
print_r('estimatesFilter: ' . $_GET["estimatesFilter"] . ' url parameter(s) was passed.');
print_r("<br>");
}
# This if keeps returning true even if estimateId is not the only item in the array?
# estimates/1001/
if (in_array($_GET["estimateId"], $_GET)) {
print_r('estimateId: ' . $_GET["estimateId"] . ' url parameter(s) was passed.');
print_r("<br>");
}
# estimates/1001/proposals/
if (in_array($_GET["estimateId"], $_GET) && in_array($_GET["proposalsFilter"], $_GET)) {
print_r('estimateId: ' . $_GET["estimateId"] . ' & ' . 'proposalsFilter: ' . $_GET["proposalsFilter"] . ' url parameter(s) was passed.');
print_r("<br>");
}
# estimates/1001/proposals/3001/
if (in_array($_GET["estimateId"], $_GET) && in_array($_GET["proposalId"], $_GET)) {
print_r('estimateId: ' . $_GET["estimateId"] . ' & ' . 'proposalId: ' . $_GET["proposalId"] . ' url parameter(s) was passed.');
print_r("<br>");
}
# estimates/1001/contracts/
if (in_array($_GET["estimateId"], $_GET) && in_array($_GET["contractsFilter"], $_GET)) {
print_r('estimateId: ' . $_GET["estimateId"] . ' & ' . 'contractsFilter: ' . $_GET["contractsFilter"] . ' url parameter(s) was passed.');
print_r("<br>");
}
# estimates/1001/contracts/3001/
if (in_array($_GET["estimateId"], $_GET) && in_array($_GET["contractId"], $_GET)) {
print_r('estimateId: ' . $_GET["estimateId"] . ' & ' . 'contractId: ' . $_GET["contractId"] . ' url parameter(s) was passed.');
print_r("<br>");
}
# estimates/1001/invoices/
if (in_array($_GET["estimateId"], $_GET) && in_array($_GET["invoicesFilter"], $_GET)) {
print_r('estimateId: ' . $_GET["estimateId"] . ' & ' . 'invoicesFilter: ' . $_GET["invoicesFilter"] . ' url parameter(s) was passed.');
print_r("<br>");
}
# estimates/1001/invoices/4001/
if (in_array($_GET["estimateId"], $_GET) && in_array($_GET["invoiceId"], $_GET)) {
print_r('estimateId: ' . $_GET["estimateId"] . ' & ' . 'invoiceId: ' . $_GET["invoiceId"] . ' url parameter(s) was passed.');
print_r("<br>");
}
?>
解决方案
# 即使estimateId 不是数组中的唯一项,这个if 仍然返回true?
# 估计/1001/
要解决您的问题,您可以检查该值是否是唯一值
if(in_array($_GET["estimateId"], $_GET))
变成:
if(\count($_GET) === 1 && \in_array($_GET["estimateId"], $_GET) ){
/***
this will only trigger if `$_GET["estimateId"]` is in the
array $_GET and is the only value in the array.
***/
}
它检查值并检查count
数组中的值。因为您正在寻找这个值,所以数组计数应该只有 1。
上面返回 true 因为 $_GET 只包含一个值。
https://localhost/data.php?estimateId=1001&proposalsFilter=all
上面返回 false 因为 $_GET 数组包含 2 个值。
推荐阅读
- java - 手动启动和停止 InboundChannelAdapter
- mysql - 如何查询没有特定活动的用户?
- reactjs - 使用从扩展运算符复制的对象时,setState 不起作用
- python - 如何在 Python 中遍历具有多个子键的 JSON 文件?
- java - 我如何通过 Spring Boot 调用具有子报告的 jasper?
- mysql - 为 Django 模型中的所有字段设置最大长度
- java - Retrofit 2 中的图像上传问题
- swift - SwiftUI:侦听我的数据中的更改以让其他视图使用更新的数据
- javascript - 如何获取生成的日历 ID 的值,然后根据其行索引将其推送到变量?
- google-apps-script - 用于将 GBK 编码转换为 UTF-8 的 Google Sheets Apps 脚本