You can create a temporary variable to store the value of address already stored in the $addresses_list array. Whenever, you are storing a $row in the $addresses_list array, you can store the address key value in the temporary variable.
Now, everytime you need to check against the temporary variable, whether the key value already exists or not.
Note that even PHP documentation recommends using [] operator against array_push(). So I have changed your code to use [] instead.
Note: If you use array_push() to add one element to the array, it's
better to use $array[] = because in that way there is no overhead of
calling a function.
Try below (explanation in comments):
$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;
}
}
If you really want unique address values only, and there is no other use of the duplicate rows. You can rather solve this problem at the SQL query end itself. You can simply use GROUP BY on address. This will optimize the data packet being transferred from database server to PHP application. Moreover, additional array operations can be done way with.
$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;
}