2016-01-29 66 views
1

我一直在將我的腳本從mysql轉換爲mysqli,並且遇到了此腳本的輸出問題。該腳本根據用戶輸入從數據庫中提取郵政編碼,然後在由用戶定義的半徑內(在本例中爲25英里)找到註冊的郵政編碼。然後,腳本將獲取這些郵政編碼,並將它們與該地區的商店活動數據庫進行比較,並根據用戶郵政編碼提供關閉商店。所有這一切都很好。問題出在我的輸出上(正如你所看到的),即使在附近只有一家商店,它也會返回重複並循環發現每個郵政編碼。重複輸出記錄

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = "password"; 
$dbname = "database"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

// select statment 
$zipcodes = 'SELECT zip_code, latitude, longitude, statename, city, 
    ROUND((ACOS((SIN(33.776/57.2958) * SIN(latitude/57.2958)) + 
    (COS(33.776/57.2958) * COS(latitude/57.2958) * 
    COS(longitude/57.2958 - -95.7128/57.2958)))) 
    * 3963) AS distance 
    from tblzipcode 
    WHERE (latitude >= 33.776 - (25/111)) 
    And (latitude <= 33.776 + (25/111)) 
    AND (longitude >= -95.7128 - (25/111)) 
    AND (longitude <= -95.7125 + (25/111)) 
    ORDER BY distance'; 
$result = $conn->query($zipcodes); 
if ($result->num_rows > 0) { 
while($row = $result->fetch_assoc()) { 
    $optioncodesOut = $row['zip_code'] . ","; 
    echo $optioncodesOut ; 

$nextplace ="select id, attn, addr1, addr2, addr3, city, state, country, zip, phone_number, fax, web_site_url, delaerwebid, ARCUSTO_ID, CUSTNO as dealer from DEALERLOCATOR where zip in (75425,75486,75421,75473,75460,75461,75470,75462,75462,75411,75477,74738,74759,75488,75446,74727,75416,74743,75450,75492,74723,74723,75443,75468,75438,75469,74721,74756,75434,75435,75441,75447,75432,75415,75436,75449,74726,75418,74760,75476,74523,74735,74735,75475,74720,75412,75448,74741,74741,74761,74542,74542,75413,75439)"; 
$result2 = $conn->query($nextplace); 
if ($result2->num_rows > 0) { 
while($row2 = $result2->fetch_assoc()) { 
    $pickthedealer = $row2['zip'] . '&nbsp;' . $row2['attn'] . $row2['ARCUSTO_ID']; 
    //echo $pickthedealer . '<br />'; 

$showplace = "select distinct zip, ARCUSTO_ID, attn from DEALERLOCATOR where ARCUSTO_ID in (25739)"; 
$result3 = $conn->query($showplace); 
if ($result3->num_rows > 0) { 
while($row3 = $result3->fetch_assoc()) { 
    echo $row3['zip'] .'&nbsp;'. $row3['attn'] . '<br />'; 
     } 
    } 
    } 
    } 
    } 
} 
//echo $nextplace; 

?> 

我做了上面的一些修改代碼,現在輸出看起來是這樣的:

75425,74743 Tall Tale Trailers Inc 
75486,74743 Tall Tale Trailers Inc 
75421,74743 Tall Tale Trailers Inc 
75473,74743 Tall Tale Trailers Inc 
75460,74743 Tall Tale Trailers Inc 
75461,74743 Tall Tale Trailers Inc 
75470,74743 Tall Tale Trailers Inc 
75462,74743 Tall Tale Trailers Inc 
75462,74743 Tall Tale Trailers Inc 
75446,74743 Tall Tale Trailers Inc 

正如你可以看到有在25英里附近10個郵政編碼但是隻有一個在這10個郵政編碼內購物。我需要幫助讓它只顯示一家店,而不是同一家店,因爲它找到了10個郵政編碼。這不是一個獨特的問題,因爲郵政編碼已經是唯一的。問題在於,如果實際上有9個不相關的列表,它會爲每個郵政編碼拉同一個經銷商。

+0

你嘗試過array_unique嗎? http://php.net/manual/en/function.array-unique.php –

+0

你是否得到正確的結果? –

+0

Somnath ..結果是正確的,但它們太多了。它應該只顯示一條輸出線。 – subekk0

回答

0

我想你是包括它在數組中。因此,對於每次迭代,它都將添加到$ categories數組中。您可以使用如果in_arrayarray_unique

while($row2 = $result2->fetch_array()) { 
    $categories[$row2['zip']] = $row2; 
} 
0

實際上,它原來是一個嵌套問題的條件。