循环中的PHP数组未清除

循环中的PHP数组未清除,php,arrays,loops,Php,Arrays,Loops,我正在编写一个实用程序来从文本文件加载数据。我有一个字典文件集合,我正在将其处理为定义数据文件结构的数组。是的,我可以使用类或其他方式,但是使用数组,我被难倒了 假设我有3个文件,我读取并加载到数组中。当我阅读数组时,第三个实例包含第二个实例的元素,尽管尝试使用unset和其他东西。我错过了什么?我在cygwin上使用PHP5.3.16 下面是列表的示例,但不是真正的列表。因此,请忽略substr语句,因为它们不是真实的 fname c 1 16 lname c 17 30 addr c 1

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

假设我有3个文件,我读取并加载到数组中。当我阅读数组时,第三个实例包含第二个实例的元素,尽管尝试使用unset和其他东西。我错过了什么?我在cygwin上使用PHP5.3.16

下面是列表的示例,但不是真正的列表。因此,请忽略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(第二个数组的最后两个条目与第三个数组合并)。

这是我得到的输出:

<?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);
?>

输出:

注意:未定义的变量:第13行/code/MQpnac中的fldprops
阵列(1){ [0]=> 阵列(4){ [0]=> 字符串(8)“HelloWor” [1]=> 字符串(1)“d” [2]=> 弦(3)“冰” [3]=> 字符串(3)“oSe” } } int(1) 无效的 PHP注意:未定义变量:第13行/code/MQpnac中的fldprops

所以PHP做得很好。查看live at:为什么还要处理临时变量

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

您能发布一个
$s
值吗?
$fldprops=array()
创建一个新的空数组,那么您如何确定它不起作用?请您重新表述问题。我很难理解您想做什么以及哪里出错。@user1723406您希望输出是什么样子?因为您忘记了单词
字段中的元音。我相信就是这样。谢谢你-结果证明我没有在正确的地方测试失败。在创建数组并将其分配给外部数组时,这些值很好。正如@Jack指出的,问题在于使用。所以,在代码的后面,我有这样一个:foreach($arr as$arrelem),当我点击第三个时,我得到了对前一个条目的旧引用。Praveen,你有没有洞察到为什么在我使用foreach循环时,我会以某种方式得到对早期数组中元素的引用。查看上面的更新-我在创建端进行了一次var_转储,似乎找到了一些东西,但是在foreach循环的中间和第三次迭代中,我看到了第二个嵌套数组的属性。谢谢。没关系-愚蠢的内部/外部循环问题。。。谢谢你的帮助。这很有帮助,但不能解决我的问题。谢谢。别担心,我一定是误解了这个问题。我仍然不知道问题出在哪里,但听起来好像Praveen Kumar已经帮你解决了。因此,你应该点击他答案旁边的勾号,将其标记为已接受。
$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++;
}