我正在尝试将下面表单中的输入文件转换为一系列可以操作的对象。
arabian_sea_area = {
1926 1927 1931 1932 1933 2029 2030
}
gulf_of_aden_sea_area = {
1925 2024 5285 5286
}
SDF
<?php
$all_areas = array();
if (($handle = fopen("area.txt", "r")) == False)
{
die("failed to open file\n");
}
while (($line = fgets($handle)) !== FALSE)
{
if (ctype_alpha($line[0]))
{
$line= explode(" ",$line);
// echo($line[0]."\n");
$area = $line[0];
$IDs = explode(" ", fgets($handle));
$IDs[0] = ltrim($IDs[0], ' '); // trying to remove tab from first ID
$all_areas[$area] = $IDs;
//array_push($all_areas, $temp);
}
}
//echo("a\n");
print_r($all_areas["arabian_sea_area"]);
//var_dump ($all_areas);
?>
值在注释掉的调试行中正确打印,但最后无法为var_dump打印任何内容。
编辑:我意识到这一点还不清楚,我试图做的是创建一个主“all_areas”数组,该数组链接到标题为第一行的对象(即.arabian_sea_area等)然后我可以得到数字ID为每个区域在算法上用于以后的脚本。
答案 0 :(得分:2)
您的代码存在许多问题:
1 -
if (ctype_alpha($line[0]))
{
$line= explode(" ",$line);
//echo($line[0]."\n");
$temp = $line[0];
$temp = new Area;
$temp->filler($line, $handle);
}
你正在创建一个$ temp变量,但你忘了把它推到你的主阵列$ all_areas。使用array_push
2-
var_dump ($arabian_sea_area);
$ arabian_sea_area不存在。 你的意思是打印你的主阵列$ all_areas?
3-建议:
出错(echo(&#34;无法打开文件\ n&#34;);)建议使用die(&#34;无法打开文件\ n&#34;);而不是回声。因为die会阻止脚本的其余部分执行。
- 更新 -
我以一种应该正常工作的方式编辑了你的代码:
class Area {
public $area_name;
public $IDs = array();
public function filler($line, $handle) {
$this->area_name = $line[0];
//echo($this->area_name."\n");
$this->IDs = explode(" ", fgets($handle));
//print_r($this->IDs);
}
}
$all_areas = array();
if (($handle = fopen("area.txt", "r")) == False)
{
die("failed to open file\n");
}
while (($line = fgets($handle)) !== FALSE)
{
if (ctype_alpha($line[0]))
{
$line= explode(" ",$line);
// echo($line[0]."\n");
$temp = $line[0];
$temp = new Area;
$temp->filler($line, $handle);
array_push($all_areas, $temp);
}
}
//echo("a\n");
var_dump ($all_areas);
您可能想要更新它以删除/过滤空值。