PHP拆卸数据库插入数组

时间:2018-07-07 17:31:46

标签: php arrays database

我真的很想拆除数组

$data = file('ftp://ftp.cpc.ncep.noaa.gov/htdocs/degree_days/weighted/daily_data/2018/StatesCONUS.Heating.txt');
for ($h = 3; $h <= $ab; $h++) {
  $o = explode("|", $dataish[$h]);
  print_r($o);
}

这将创建如下所示的内容:

Array (
   [0] => Region
   [1] => 20180101
   [2] => 20180102
   ...
   [186] => 20180705
)
Array(
   [0] => AL
   [1] => 42
   [2] => 41
   ...
   [186] => 0
)

然后,所有状态一直持续到怀俄明州。

我正在尝试拆除数组,因此它们是它们自己的变量。我想将region作为一个变量,例如$ region,将AL作为另一个变量,例如$ al,直到$ wy。我不知道如何拆除它。

我的最终目标是遍历所有内容,并在每个日期为每个状态插入值。我将创建一个数据库,其中包含截至48个州的一年中的天数

|Date    |AL| ... |WY|
|20180101|42| ... |56|
|........|..| ... |..|
|20180705|..| ... |..|

任何帮助将不胜感激

谢谢!

2 个答案:

答案 0 :(得分:1)

像这样吗?

// get data
$data = file('ftp://ftp.cpc.ncep.noaa.gov/htdocs/degree_days/weighted/daily_data/2018/StatesCONUS.Heating.txt');

// put data in local variables
for ($i = 3; $i < count($data); $i++) {
  $line = explode("|", $data[$i]);
  $name = array_shift($line);
  ${$name} = $line;
}

// show all global variables (just to check the result)
echo '<pre>';
print_r($GLOBALS);
echo '</pre>';

由于代码看起来几乎与您的代码相同,因此无需过多解释。唯一的区别是,我使用array_shift从数组的第一个值中获取了变量名,并使用了一个变量变量(没有错字!),使其成为全局/局部变量,请参见:

http://php.net/manual/en/language.variables.variable.php

如果只需要小写变量,可以将strtolower()放在$name周围。

答案 1 :(得分:1)

要使数据更有用,而不是尝试将其提取为单独的变量,则可能最好将每个区域的列都提取为与相关日期相关联的数据数组。

因此,首先从第四行获取标题(进入$headers),然后使用array_combine从具有这些标题的每一行中获取数据...

$data = file('ftp://ftp.cpc.ncep.noaa.gov/htdocs/degree_days/weighted/daily_data/2018/StatesCONUS.Heating.txt');
$rows = count($data);

$headers = explode("|", $data[3]);
array_shift($headers);
$output = [];
for ($h = 4; $h < $rows; $h++) {
    $row = explode("|", $data[$h]);
    $region = $row[0];
    array_shift($row);
    $output[$region] = array_combine($headers, $row);

}
print_r($output);

这将以...格式提供输出

Array
(
    [AL] => Array
        (
            [20180101] => 42
            [20180102] => 41
            [20180103] => 35
            [20180104] => 37
            [20180105] => 36
            [20180106] => 33
            [20180107] => 29

然后您可以遍历此数组,并使用几个foreach循环将数据插入数据库中。