我正在使用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']
的地址相同,我想跳过添加到数组的操作。
答案 0 :(得分:2)
您可以创建一个临时变量来存储已经存储在address
数组中的$addresses_list
的值。每当将$row
存储在$addresses_list
数组中时,都可以将address
键值存储在临时变量中。
现在,每次需要检查临时变量时,键值是否已经存在。
请注意,即使PHP documentation也建议对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
上使用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;
}