如果PHP中存在数组,则跳过添加

时间:2018-11-10 10:20:35

标签: php arrays

我正在使用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']的地址相同,我想跳过添加到数组的操作。

1 个答案:

答案 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;
}