获取错误未定义的偏移量:1

时间:2013-09-07 18:35:41

标签: php arrays sorting error-handling

我知道这个错误已经发生了很多,但是我无法在网站上找到另一个问题来解决我的问题。

这是我的代码:

<?php

$handle = fopen('text document here', 'r');

if ($handle === false) {
die("ERROR");
}
$array = array();
$array = fgets($handle);

$handle = explode("\n", $array);

$foo = $handle;
$outA = array();
$outB = array();


foreach($foo as $value)
{
    list($x, $y) = explode(",",$value);
    $outA[] = $x;
    $outB[] = $y;
}

echo $outA[0];
echo $outB[0];
?>

我一直收到错误“注意:未定义的偏移:第20行的C:\ wamp \ www \ arraytest.php中的1”

虽然我收到了错误,但是我从数组中打印出前两个值并且它们似乎都是正确的,所以我不确切知道是什么导致了这个。

- 编辑 -

以下是我导入的数据的结构:

12,13
12,14
12,15
12,16
12,17
12,18
12,21
12,22
12,31

1 个答案:

答案 0 :(得分:0)

这里的问题是你实际上没有循环遍历文件中的所有行。

$array = fgets($handle);

现在,$array变量只包含第一行。其余的行被忽略了。

并且,在您的代码中,您有:

list($x, $y) = explode(",",$value);

基本上尝试将第一个数组值分配给$x,将第二个数组分配给$y。没有第二项,因此您会收到Undefined offset错误。

解决方案是实际循环线。我将使用while循环,如下所示:

$handle = fopen('text document here', 'r');

if ($handle === false) {
die("ERROR");
}

while(!feof($handle))
{
    $value = fgets($handle);
    list($x, $y) = explode(",",$value);
    $outA[] = $x;
    $outB[] = $y;
}

echo $outA[0]."\n";
echo $outB[0];

输出:

12
13 

其他值也正确存储。您可以使用print_r($outA);验证这一点。