【问题标题】:PHP Array InsertPHP 数组插入
【发布时间】:2012-05-19 20:13:48
【问题描述】:

确实需要一些帮助。所以我有两个这样的数组

Array
(
    [0] => UK
    [1] => UK
    [2] => USA
    [3] => USA
    [4] => USA
    [5] => France
)
Array
(
    [0] =>  London
    [1] =>  Manchester
    [21] => New York
    [22] => Florida
    [23] => Hawaii 
    [24] => Paris
)

我需要像这样将它插入到mysql数据库中

Country  City
UK       London, Manchester
USA      New York, Florida, Hawaii
France   Paris

我对 PHP 没问题,但我真的坚持使用这个。没有任何代码可以显示,因为我完全不知道如何实现这一点。有人可以帮我实现这一目标吗?提前感谢您的帮助。

【问题讨论】:

  • 您已经拥有数据库了吗?你知道如何从 php 连接到它吗?您确定要将逗号分隔的列表插入到名为“City”的列中吗?
  • 看看foreach()
  • 为什么纽约-巴黎的指数不是2-5?这将使这变得容易得多。

标签: php mysql arrays insert


【解决方案1】:

第一个数组是$countries,第二个数组是$cities

$map = array();
while (!empty($countries) && !empty($cities)) {
  $map[array_shift($countries)][] = array_shift($cities);
}

foreach ($map as $country => $cities) {
  $cities = join(', ', $cities);
  // TODO: insert row with $country and $cities into database.
}

作为旁注,我怀疑您的数据库未标准化。如果您还没有这样做,请阅读数据库的规范化。

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      如果你重新索引你的数组,你可以并行迭代它们:

      $cities = array_values($cities);
      $countries = array_values($countries);
      for($i = 0; $i < count($cities); ++$i) {
          $city = $cities[$i];
          $country = $countries[$i];
      
          // now do something with $city and $country
      }
      

      现在让我们看看“做某事”部分可能是什么。如果要按国家/地区连接城市名称,则需要先按国家/地区分组。所以让我们这样做:

      $groups = array();
      
      for (...) {
          $city = $cities[$i];
          $country = $countries[$i];
      
          if (!isset($groups[$country])) $groups[$country] = array();
          $groups[$country][] = $city;
      }
      

      此时您应该执行print_r($groups) 以查看我们已经对城市进行了分组。将每个组转换为连接字符串很容易:

      foreach($groups as &$group) { // ATTENTION: iterating by reference
          $group = implode(', ', $group);
      }
      

      再做一次print_r

      但是,这种类型的数据库结构看起来并不正确(取决于应用程序,因此不确定)。也许您应该考虑使用一个包含国家/城市列的表,这样输入数组中的每对元素都对应一行。

      【讨论】:

        【解决方案4】:
        $countries = array("UK","UK","USA","USA","USA","FRANCE");
        $cities = array(0=>"London",1=>"Manchester",23=>"New York",24=>"Florida",25=>"Hawaii",26=>"Paris");
        
        $combined = array();
        $cities = array_values($cities);
        foreach ($countries as $index => $country)
        {
            $combined[$country][] = $cities[$index];    
        }
        
        foreach ($combined as $country => $cityList)
        {
            $sql = sprintf("INSERT INTO `MyTable` (Country,City) VALUES ('%s','%s')",$country,implode(',',$cityList));
        

        【讨论】:

        • 谢谢...它几乎是我想要的,但并不完全...我需要它来执行如下插入操作。我该怎么做呢?插入MyTable(国家、城市)值('英国'、'伦敦、曼彻斯特')插入MyTable(国家、城市)值('美国'、'纽约、佛罗里达、夏威夷')插入@ 987654324@ (Country,City) VALUES ('France','Paris')
        • 您的意思是将查询发送到数据库吗?
        • 是的,当我运行上面的代码时,它会将每个国家/地区插入新行...有没有办法连接结果并插入它?
        • 您只想插入一行?你能写出查询的样子吗?
        • 我很困惑......对不起。这很抱歉,非常感谢您的帮助。非常感谢它=)
        【解决方案5】:
        1. 您必须像这样将国家代码与城市绑定:

          Array
          (
              [0]['code'] => UK
              [0]['city'] => London
          )
          ....
          
        2. 如果您有带有 => 对的多维数组,则可以使用 foreach 和 case (if) 语句创建适当的 sql。

        【讨论】:

          【解决方案6】:

          所以我不确定您要做什么,或者为什么您有两个可能应该是 1 的数组,这当然是假设该城市始终与其正确的国家/地区相关联。我会说曼彻斯特和伦敦都在英国,所以他们在数据库中的国家字段将是英国,然后你可以用一个简单的 MySQL 查询来调用它们,询问国家等于的所有城市城市代码

          所以你的数据库应该是这样的

           ID      CITY       COUNTRY
           1       London     UK
           2       Manchester UK
           3       New York   USA
           4       Florida    USA
           5       Hawaii     USA
           6       Paris      France
          

          然后你可以随心所欲地用 MySQL 查询调用它,

           SELECT * FROM table WHERE country = 'UK'
          

          这将为您提供伦敦和曼彻斯特的结果

          这应该会让你朝着正确的方向前进

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-10-11
            • 2012-05-19
            • 2017-07-08
            • 2011-04-24
            • 2012-06-09
            • 2011-11-10
            • 2015-12-25
            • 2011-04-27
            相关资源
            最近更新 更多