0

真的可以做一些帮助。所以我有两个这样的数组

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 没问题,但我真的坚持这个。没有任何代码可以显示,因为我完全不知道如何实现这一点。有人可以帮我实现这一目标吗?在此先感谢您的帮助。

4

6 回答 6

2

第一个数组是$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.
}

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

于 2012-05-11T08:24:37.330 回答
1

阅读本教程:http ://www.tizag.com/mysqlTutorial/

于 2012-05-11T08:20:49.843 回答
1

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

$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;
}

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

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

再做print_r一次。

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

于 2012-05-11T08:24:39.723 回答
0
$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));
于 2012-05-11T08:27:42.393 回答
0
  1. 您必须将国家代码与城市绑定,如下所示:

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

因此,我不确定您要做什么,或者为什么您有两个可能应该为 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'

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

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

于 2012-05-11T08:43:29.447 回答