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"
    }
}

配列に表示されるすべての州のすべての郡の近傍値を取得できる必要があります。データ構造は、近隣番号が郡に固有であり、州に固有であるというものです。

各州の郡ごとに配列を作成することを考えていますが、州と郡が同一である場合に近隣のすべての値を見つける方法がわかりません。

コメントのリクエストによると、私はSTATE、COUNTY、NEIGHBORHOOD、LATITUDE、LONGITUDEの情報を含むDBを持っています。次の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 に答える