php - 如果 PHP 中存在数组,则跳过添加到数组
问题描述
我正在使用in_array
函数跳过将相同的地址添加到数组中。
代码:
$addresses_list = array();
$stmt_select_address_result = $databaseManager->connect()->prepare("SELECT lat,lng,address FROM api_order where userid=683;");
$stmt_select_address_result->execute();
while ($row = $stmt_select_address_result->fetch(PDO::FETCH_ASSOC)) {
if (!in_array($row, $addresses_list)) {
array_push($addresses_list, $row);
}
}
$row['address']
如果与 的地址相同,我想跳过添加到数组中$addresses_list['address']
。
解决方案
您可以创建一个临时变量来存储address
已存储在$addresses_list
数组中的值。每当您将 a 存储$row
在$addresses_list
数组中时,您都可以将address
键值存储在临时变量中。
现在,每次您需要检查临时变量时,键值是否已经存在。
请注意,即使是PHP 文档也建议[]
对array_push()
. 所以我改变了你的代码来[]
代替使用。
注意:如果使用 array_push() 向数组添加一个元素,最好使用 $array[] = 因为这样就没有调用函数的开销。
试试下面(评论中的解释):
$addresses_list = array();
$temp_addresses = array(); // Create a temp array
$stmt_select_address_result = $databaseManager->connect()->prepare("SELECT lat,lng,address FROM api_order where userid=683;");
$stmt_select_address_result->execute();
while ($row = $stmt_select_address_result->fetch(PDO::FETCH_ASSOC)) {
// check in temporary variable instead
if (!in_array($row['address'], $temp_addresses)) {
// add to temp array to avoid duplicate entry in next loop
$temp_addresses[] = $row['address'];
$addresses_list[] = $row;
}
}
如果您真的只想要唯一的地址值,并且重复行没有其他用途。您可以在 SQL 查询端本身解决这个问题。您可以简单地使用GROUP BY
on address
。这将优化从数据库服务器传输到 PHP 应用程序的数据包。此外,可以通过其他方式完成额外的数组操作。
$addresses_list = array();
// It is a good practice to have query string in a separate variable
$sql = "SELECT lat,lng,address
FROM api_order
where userid=683
GROUP BY address;"
$stmt_select_address_result = $databaseManager->connect()->prepare($sql);
$stmt_select_address_result->execute();
while ($row = $stmt_select_address_result->fetch(PDO::FETCH_ASSOC)) {
// No need for any checks, as you are getting unique addresses only
$addresses_list[] = $row;
}
推荐阅读
- antlr4 - 优先与可选就足够了
- javascript - 反应 useEffect 挂钩引用不正确的值
- java - 程序的 Java 阶乘计算不能做 0,1,2 我该如何解决这个问题
- javascript - 在 React 中将 props 传递给 this.props.children
- vue.js - vue/element ui 表单验证
- amazon-web-services - 使用 Azure AD 联合 SSO 访问 AWS 的桌面应用程序
- amazon-cloudformation - 这可能有可选的 SSM 参数吗?
- java - 如何使用版本 2 的 spring boot admin 和版本 1.5 的 spring boot?
- ios - Nativescript:添加运行脚本阶段
- javascript - 对 Flask 的 jquery Ajax 请求