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';"

这些邻居可以在不同的州和县,我无法知道这一点。

4

1 回答 1

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]);
    }
}

至少,这个概念是存在的。这个想法是像这样散列它会删除重复项,因为它们最终会相互覆盖,并且它嵌套在层次结构中,这是它自然发生的方式。

编辑

我很快将一个测试类放在一起,并用该类更新了我的代码。请注意,没有有效性检查等。但这可能是您获得所需内容的开始。

我希望这会有所帮助!

于 2012-08-06T20:09:50.873 回答