我正在编写一个实用程序来从文本文件中加载一些数据。我有一个字典文件集合,我正在处理数组,定义数据文件的结构。是的,我可以使用类或其他方式,但使用数组,我已经被难倒了。
假设我有3个文件可以读取并加载到数组中。当我读取数组时,第三个实例具有第二个元素,尽管尝试使用未设置和其他东西。我错过了什么?我在使用php 5.3.16的cygwin上
以下是列表的示例,但不是真实列表。因此,请忽略substr语句,因为它们不是真实的
fname c 1 16
lname c 17 30
addr c 1 20
city c 21 30
state c 31 40
zip n 41 45
bday d 1 9
ssn c 10 18
使用下面的代码加载时,第三个数组包含第二个元素,即bday,ssn,state和zip。
$cnt = 0;
while ($s = fgets($fp, 1024)) {
$fldprops = array();
$fldprops[0] = trim(substr($s,0,8));
$fldprops[1] = trim(substr($s,9,1));
$fldprops[2] = trim(substr($s,11,3));
$fldprops[3] = trim(substr($s,15,3));
$flds[$cnt] = $fldprops;
$cnt++;
unset($fldprops);
}
我原以为$ fldprops = array();或者unset()会清除数组,但它不起作用。
更新:我错误地指出了失败的意义。它显然不是写在外部阵列上,而是在阅读中。正如我在评论中提到的,稍后在代码中,我有一个foreach循环,这里失败了:
foreach ($flds as $fldprop) {
var_dump($fldprop);
}
这里,我得到bday,ssn,state和zip(第二个数组的最后两个条目与第三个数组合并)。
答案 0 :(得分:1)
这是我得到的输出:
<?php
$flds = array();
$cnt = 0;
$s = "HelloWorldNiceToSeeYou";
$fldprops = array();
$fldprops[0] = trim(substr($s,0,8));
$fldprops[1] = trim(substr($s,9,1));
$fldprops[2] = trim(substr($s,11,3));
$fldprops[3] = trim(substr($s,15,3));
$flds[$cnt] = $fldprops;
$cnt++;
unset($fldprops);
var_dump($flds, $cnt, $fldprops);
?>
<br />
<b>Notice</b>: Undefined variable: fldprops in <b>/code/MQpnac</b> on line <b>13</b><br />
array(1) {
[0]=>
array(4) {
[0]=>
string(8) "HelloWor"
[1]=>
string(1) "d"
[2]=>
string(3) "ice"
[3]=>
string(3) "oSe"
}
}
int(1)
NULL
PHP Notice: Undefined variable: fldprops in /code/MQpnac on line 13
答案 1 :(得分:0)
为什么甚至打扰临时变量?
$cnt = 0;
while ($s = fgets($fp, 1024)) {
$flds[$cnt] = array(
trim(substr($s,0,8)),
trim(substr($s,9,1)),
trim(substr($s,11,3)),
trim(substr($s,15,3)),
)
$cnt++;
}