对于循环显示错误称为关闭未定义


for loop show error called offest Undefined

$size=$_POST['size']; //Post
$a=count($size); 
for($x=0;$x<$a;$x++)
{
    $f=$size[$x];
    echo $f;
}

上面的代码返回名为通知的错误:未定义的偏移量:1

假设一个这样的数组:

$size = [
    'foo' => 'bar',
    'zar' => 'car'
];

在这种情况下,count($size);将为 2,但索引01不存在(它是一个 assoc 数组)。这就是为什么你最好使用foreach

foreach ($size as $key => $value)
{
    echo '$size[' . $key . '] = ' . $value, PHP_EOL;
}

输出:

$size[foo] = bar
$size[zar] = car

当然,这一切都假设$size实际上是一个数组。您确实应该首先检查一下:

$size = isset($_POST['size']) && is_array($_POST['size']) ? $_POST['size'] : [];//default to empty array

我建议这样做:

$size=$_POST['size']; //Post
foreach($size as $value) {
    print $value;
}

因为它干净简洁

对于多个数组,请使用:

$size=$_POST['size']; //Post
$size1=$_POST['size1']; //Post
foreach(array_combine($size,$size1) as $key=>$value) {
    print $key."<br/>".$value."<br/>";
}

当您访问像 $size[$x] 这样的数组时,您正在访问带有偏移$x的数组$size

通知Undefined offset: 1意味着数组$size要么不是数组,要么没有元素1

就您而言,我认为$size是:

  • 关联数组。这意味着它没有数字键,因此您将无法像那样循环它。而是使用这样的东西:

    foreach($size as $element) {
        echo $element;
    }
    

    这也适用于数字键,并且总体上是更干净的方法。

  • 假设您正在从$_POST超全局中检索数据,则提供的输入可能不是数组。要对其进行更多调试,请将调试器与 IDE 一起使用,也可以使用旧的var_dump()

希望有帮助。

编辑:我意识到在我写这篇文章的这段时间里,许多其他人也回答了这个问题。