我有一个来自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"
}
}
我需要能够获得阵列中出现的每个州的每个县的邻域值。数据结构是邻域编号对于该县是唯一的,这是该州独有的。
我正在考虑为每个州的每个县创建一个数组,但是当州和县相同时,我不确定如何找到邻域的所有值。
根据评论中的请求,我有一个DB,其中包含STATE,COUNTY,NEIGHBORHOOD,LATITUDE,LONGITUDE的信息。我使用以下SQL语句来获取用户选择的用户输入半径范围内的所有邻居。
"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';"
这些邻居可能在不同的州和县,我无法知道这一点。
答案 0 :(得分: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]);
}
}
至少,这个概念就在那里。这个想法是像这样散列会删除重复项,因为它们最终会覆盖彼此,并且它嵌套在层次结构中,这就是它自然发生的方式。
修改强>
我迅速将测试类放在一起,然后用该类更新了我的代码。请注意,没有有效性检查等等。但它可能是您获得所需内容的开始。
我希望有所帮助!