2012-08-06 47 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