for loop show error,名为offest Undefined

时间:2015-01-29 08:52:10

标签: php

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

上面的代码返回错误,名为Notice:Undefined offset:1

3 个答案:

答案 0 :(得分:1)

假设一个这样的数组:

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

在这种情况下,count($size);将为2,但索引01不存在(它是一个关联数组)。这就是为什么你更善于使用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

答案 1 :(得分:1)

我建议做:

$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/>";
}

答案 2 :(得分:0)

当您访问$size[$x]之类的数组时,您正在使用偏移$size访问数组$x

通知Undefined offset: 1表示数组$size要么不是数组,要么没有元素1

在您的情况下,我认为$size是:

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

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

    这也适用于数字键,总体而言是更清洁的方法。

  • 鉴于您要从$_POST超全局检索数据,所提供的输入很可能不是数组。要对其进行更多调试,请在IDE中使用调试器或使用旧的var_dump()

希望有所帮助。

编辑:我意识到在我写这篇文章的时候,其他许多人也回答过。