Пропустить добавление в массив, если он существует в переполнении стека

я использую 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'],

2

Решение

Вы можете создать временную переменную для хранения значения address уже хранится в $addresses_list массив. Всякий раз, когда вы храните $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 на 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;
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector