0

これは本当に簡単な解決策があるようです...しかし、私はそれを理解するのに苦労しました。データベースに入るには配列が必要です。例えば:

$usa = array(
'idaho' => array(
           county1 => array(
                     'pocatello', 'arimo', 'downey'
                      ),
           county2 => array(
                      'bear', 'cuprum', 'mesa'
                      )
'iowa' => array(
           county1 => array(
                     'des moines', 'adel', 'desoto'
                      ),
           county2 => array(
                      'douglas', 'grant', 'jasper'
                      )

);

私はデータベースに挿入するこの方法を試しました:

foreach($usa as $state => $county){
    foreach($county as $name => $city){
    $s=$state;
    $county_name = strtolower($name);
    $city = strtolower($city);
    $us = "INSERT INTO us
           SET state='{$s}',county='{$county_name}',city='{$city}'
           ";
    $us_result = mysql_query($us,$connection);
         }
  }

問題はforeach(状態変数を2番目のforeachループに渡す)だと思います。私はこれをいくつかの異なる方法で試しました。よろしくお願いします!

***注:挿入の$ s =$state変数とstate='{$s}'の部分を削除すると、すべてがうまく機能します。まだ状態を挿入することができません

4

4 に答える 4

1

2つの大きな問題があります。

まず、配列が適切に区切られていないため、とにかく文字列として参照している郡名に一重引用符または二重引用符を使用することをお勧めします。

$usa = array(
  'idaho' => array(
       'county1'=>array(
                 'pocatello', 'arimo', 'downey'
                  ),
       'county2'=>array(
                  'bear', 'cuprum', 'mesa'
                  )),
  'iowa' => array(
       'county1'=>array(
                 'des moines', 'adel', 'desoto'
                  ),
       'county2'=>array(
                  'douglas', 'grant', 'jasper'
                  ))

);

次に、都市名を説明するための foreach ループがもう 1 つ必要です。

foreach($usa as $state => $county){
  foreach($county as $name => $city){
    foreach ($city as $cityname) {
      $s = $state;
      $county_name = strtolower($name);
      $city = strtolower($cityname);
      $us = "INSERT INTO us SET state='{$s}',county='{$county_name}',city='{$city}'";
      echo $us.'<br>';
    }
  }
}

お役に立てれば!

于 2012-05-10T20:26:30.517 に答える
1

初め。@itsmeee が述べたように、その郡の都市の配列を反復処理する foreach がもう 1 つありませんでした。それに加えて、入力配列には、状態ごとにデータの配列をラップするための 2 つの閉じ括弧がありません。

あなたがそれを修正するなら、私はただやります:

$us     = "INSERT INTO us (state, county, city) VALUES ";
$values = array();

foreach($usa as $state => $county){
    foreach($county as $name => $cities){
        foreach($cities as $city){
            $county_name = strtolower($name);
            $city        = strtolower($city);
            $values[]    = "('{$state}','{$county_name}','{$city}')";
        }
    }
}

$us       .= join(',',$values);
$us_result = mysql_query($us,$connection);

これにより、挿入文字列が作成され、すべての挿入が 1 回で実行されます。個々の挿入を行うこともできますが、データセットの場合、この小さな挿入を 1 つの大きな挿入で行う方が効率的です。

幸運を!

于 2012-05-10T20:26:40.240 に答える
0

foreach をもう 1 つ見逃しているようです。

foreach($county as $name => $cities) {
 foreach ($cities as $city) {
....
于 2012-05-10T20:20:11.003 に答える
0

INSERT クエリが正しくありません。これを試して:

$us = "INSERT INTO us (state, county, city) VALUES ('" . mysql_real_escape_string ($s) . "', '" . mysql_real_escape_string ($county_name) . "', '" . mysql_real_escape_string ($city) . "')";
于 2012-05-10T20:11:56.757 に答える