循环中的PHP数组没有清除

时间:2012-10-05 15:13:43

标签: php arrays loops

我正在编写一个实用程序来从文本文件中加载一些数据。我有一个字典文件集合,我正在处理数组,定义数据文件的结构。是的,我可以使用类或其他方式,但使用数组,我已经被难倒了。

假设我有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(第二个数组的最后两个条目与第三个数组合并)。

2 个答案:

答案 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

因此PHP正确地做到了。现在点击:http://codepad.viper-7.com/MQpnac

答案 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++;
}