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