2012-08-06 63 views
0

我有一個來自MySQL數據庫調用的多維數組。它看起來是這樣的:在多維數組中查找重複值

array(2) { 
    [0]=> array(4) { 
     ["STATE"]=> "1" 
     ["COUNTY"]=> "101" 
     ["NEIGHBORHOOD"]=> "111111" 
    } 

    [1]=> array(4) { 
     ["STATE"]=> "2" 
     ["COUNTY"]=> "201" 
     ["NEIGHBORHOOD"]=> "222222" 
    } 

    [2]=> array(4) { 
     ["STATE"]=> "1" 
     ["COUNTY"]=> "201" 
     ["NEIGHBORHOOD"]=> "111111" 
    } 
} 

我需要能夠得到鄰里值每個縣在出現的陣列中的每個狀態。數據結構是鄰里數是該縣獨有的,這對於該州來說是獨一無二的。

我正在考慮爲每個州的每個縣創建一個數組,但是我不知道如何在州和縣相同時找到所有鄰居的值。

根據評論中的要求,我有一個數據庫,包含州,縣,鄰居,緯度,長度等信息。我正在使用以下SQL語句來獲取用戶輸入位置的用戶選定半徑內的所有NEIGHBORHOODS。

"SELECT `STATE` , `COUNTY` , `NEIGHBORHOOD`,((ACOS(SIN($lat* PI()/180) * SIN(`LATITUDE` * PI()/180) + 
     COS($lat* PI()/180) * COS(`LATITUDE` * PI()/180) * COS(($long- `LONGITUDE`) * 
     PI()/180)) * 180/PI()) * 60 * 1.1515) AS distance 
     FROM `censustracts` 
     HAVING distance<='$radius';" 

這些NEIGHBORHOODS可以在不同的州和縣,我無法知道這一點。

+0

我想你想優化你的查詢,所以你只得到你真正想要的結果。結果集將會更小,並且您將在PHP中處理更少。如果您需要幫助,請將您的問題添加到您的問題中。 – arnoudhgz 2012-08-06 19:55:10

+0

我在這裏沒有包含的例子是這些是基於座標數據的。所以我正在拉一個給定點的X英里半徑範圍內的所有東西。因此,如果我的中心點位於邊界,它可能會從多個縣或州拉開。我無法講述。 – micahmills 2012-08-06 19:57:17

+0

您應該編輯您的問題以包含有關查詢的信息以及數據結構的建模方式以及數據庫中的執行方式。 – Whisperity 2012-08-06 19:57:19

回答

0

也許有更好的方法來做到這一點,通過不通過你的SQL查詢重複,但你可以哈希你的獨特的價值,以確保刪除重複項。

$tmp = array(); 
foreach($array as $r) { 
    $tmp[ $r["STATE"] ][ $r["COUNTY"] ][ $r["NEIGHBORHOOD"] ] = NULL; 
} 

這應該留給你一個這樣的數組:

[1] => { 
      [101] => { 
         [111111] => NULL 
         [333333] => NULL 
         [......] => NULL 
         [xxxxxx] => NULL 
        } 
      [201] => { 
         [111111] => NULL 
        } 
     } 
    [2] => { 
      [201] => { 
         [222222] => NULL 
        } 
     } 

採用這種結構的想法,你的封裝這一成一類,返回的東西像所有社區對於給定的州或縣。

class myClass{ 
    protected $_data; 

    public function __construct($array) 
    { 
     $tmp = array(); 
     foreach($array as $r) { 
      $tmp[ $r["STATE"] ][ $r["COUNTY"] ][ $r["NEIGHBORHOOD"] ] = NULL; 
     } 
     $this->_data = $tmp; 
    } 

    public function getNeighborhoods($state, $county) { 
     return array_keys($this->_data[$state][$county]); 
    } 
} 

至少,這個概念就在那裏。這個想法是,像這樣散列它會刪除重複項,因爲它們最終會覆蓋對方,並且它嵌套在層次結構中,這就是它自然發生的情況。

編輯

我趕緊扔了測試類在一起,我更新了我與類代碼。請注意,沒有有效性檢查等等。但它可能是您開始尋找所需的東西。

我希望有幫助!

+0

這將工作感謝您的幫助 – micahmills 2012-08-06 20:43:17