Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在while循环中添加到数组时遇到问题_Php_Arrays_While Loop - Fatal编程技术网

Php 在while循环中添加到数组时遇到问题

Php 在while循环中添加到数组时遇到问题,php,arrays,while-loop,Php,Arrays,While Loop,我有一个while循环,它使用fgetcsv函数并在csv文件中迭代,直到结束。在循环中,我想将特定列中的值添加到新数组中 一切都在响应我需要的专栏中的值。但是,当我将该行添加到数组中时,它不起作用。我有一个在PHP代码之后打印的HTML表,但是当我使用该行添加到数组时,它不起作用 我在网上看到的一切都是按照我的方式做的,所以我有点困惑 这是我的密码: $amountRecords = 0; $totalValue = 0; $valueArray = array(); $handle = f

我有一个while循环,它使用fgetcsv函数并在csv文件中迭代,直到结束。在循环中,我想将特定列中的值添加到新数组中

一切都在响应我需要的专栏中的值。但是,当我将该行添加到数组中时,它不起作用。我有一个在PHP代码之后打印的HTML表,但是当我使用该行添加到数组时,它不起作用

我在网上看到的一切都是按照我的方式做的,所以我有点困惑

这是我的密码:

$amountRecords = 0;
$totalValue = 0;
$valueArray = array();

$handle = fopen('data.csv', 'r');
// to skip the header names/values 
fgetcsv($handle);

while($row = fgetcsv($handle, "\r"))
{

    $valueArray[$amountRecords] += $row[1]; // THIS IS THE LINE THAT IS NOT WORKING
    $totalValue = $totalValue + $row[1];
    $amountRecords++;

}

你的代码有些奇怪。您每次都在增加
$amonRecords
,因此您永远不会在
$valueArray
中访问同一索引两次,但您正在向每个元素添加值。可能您只是想用
$valueArray[$amountRecords]=$row[1]分配值而不是
+=

如果是这种情况,看起来您只是简单地尝试将项添加到数组的末尾,将列1提取到它自己的数组中。您应该使用
array\u push
array[]=
语法:

while($row = fgetcsv($handle, "\r"))
{
    // Add $row[1] to the end of $valueArray
    $valueArray[] = $row[1];

    $totalValue = $totalValue + $row[1];
}
+=
运算符用于向现有值添加内容。键入
a+=b
与键入
a=a+b
相同。您应该在下一行使用该运算符,例如:

 $totalValue += $row[1];
作为最后的建议,学习做一些基本的调试。如果你的循环不起作用,让它向你展示在每次迭代中它在做什么。使用
var\u dump
检查变量,确保它们实际包含您认为它们包含的内容。使用
var\u dump($row)
尤其有助于确保
$row[1]
是正确的索引

echo "Before loop\n";

while($row = fgetcsv($handle, "\r"))
{
    echo '$row contains: ';
    var_dump($row);

    $valueArray[] += $row[1]; // THIS IS THE LINE THAT IS NOT WORKING

    echo '$valueArray now contains ':
    var_dump($valueArray);

    $totalValue = $totalValue + $row[1];
}

echo "After loop\n";

根据我对您的脚本的理解,
$valueArray[$amountRecords]+=$row[1]
没有任何逻辑意义,因为它依赖于
$AmonRecords++总是会增加

我认为你的剧本会像这样很好

while ( $row = fgetcsv($handle, "\r") ) {

    $valueArray[] = $row[1]; // Put all Row[1] Into a array
    $totalValue += $row[1]; // Sum total Value 
    $amountRecords ++; //Get Record Count
}

这样做了,但打印或显示后没有我的代码?当我注释该行时,它起作用了?@JoshPullin解释一下,
$valueArray
是什么意思。对不起,我的行应该是
$valueArray[]=$row[1]
,这是用于将项附加到数组的PHP语法。@hookman$valueArray只是一个新数组,我希望添加$row[1]中的值to@meagar我已经按照建议进行了调试,它添加到数组中并打印,但只是停止,并没有到达循环的末尾。csv文件中大约有260k行。这可能是阵列的问题,并且while循环无法完成吗?就像数组冻结一样?当他可以在循环完成后简单地调用
count($valueArray)
时,维护记录计数就没有意义了。+1好的一个meagar。。我同意你。。。。这只是他原作的转载script@Baba是的,我已经做了,但由于某种原因,它仍然冻结。csv文件有超过260k行,因此valueArray数组无法处理循环冻结时添加的记录量,这可能是一个问题吗?@Josh Pullin快速提问:为什么需要将其添加到数组中???你的PHP内存限制是多少???