未定义的偏移量:

时间:2013-06-25 12:26:07

标签: php arrays

$result = db2_getsub( array('campaigns_id' => $this_id) );

if (!is_null($result))
    {
          $numsub = 0;
    while ( $row = $result->fetch_object() )
        {
            $numsub = $numsub +1;
            array_push($arrFornavn, $row->sub_name);
                    array_push($arrEtternavn, $row->sub_code);
                    }
          $formcountfld=$numsub;
                }
        else
        {
        $numsub=1;
        $formcountfld=1;
        }

            $i = 1;

            if (1==1) {

                for ($i = 1; $i <= $numsub; $i++)
                {
        ?>
          <div class="fieldrow_horz">

            <div class="fieldgroup">
              <input type="text" id="fornavn_<?= $i ?>" name="fornavn_<?= $i ?>" value="<?= $arrFornavn[$i-1] ?>" />
            </div>

            <div class="fieldgroup">
              <input type="text" id="etternavn_<?= $i ?>" name="etternavn_<?= $i ?>" value="<?= $arrEtternavn[$i-1] ?>" />
            </div>

          </div>

          <?php

                    }

            } else {

        ?>

我收到错误,因为Notice: Undefined offset: 0任何人都可以提供帮助。谢谢提前寻找答案。

2 个答案:

答案 0 :(得分:2)

这意味着您正在尝试访问不存在的值,在您的情况下为$ arrEtternavn [0]。

小例子:

$array = array();
$array[1] = 'one';
$array[2] = 'two';
$array[4] = 'four';

echo $array[0]; // This will give a notice, $array[0] does not exist.
echo $array[1]; // 'one'
echo $array[2]; // 'two'
echo $array[3]; // This will give a notice, $array[3] does not exist.
echo $array[4]; // 'four'

一个非常简单的解决方法就是这样的:

value="<?= isset($arrEtternavn[$i-1]) ? $arrEtternavn[$i-1] : '' ?>"

这是一个简短的elseif-&gt; (条件)? if_True:if_False

编辑:我想补充一点,通知不是一件坏事。没有通知是最好的,但它不应该让你在晚上保持清醒。

答案 1 :(得分:1)

我的猜测是这样的......如果$result 为空,则在$numsub = 1子句中设置else。但是,在这种情况下,您没有向数组添加任何内容。然而,您的后续循环将持续条件定义为$numsub <= 1,因此将执行并尝试打印出数组索引0,因为$result NULL不包含因为数组为空。

将for循环更改为

for ($i = 0; $i < $numsub; $i++) // Notice now strictly less than
{
    <div class="fieldrow_horz">
        <div class="fieldgroup">
          <input type="text" id="fornavn_<?= $i+1 ?>" name="fornavn_<?= $i+1 ?>" 
                                              ^^^^                       ^^^^ 
                 value="<?= $arrFornavn[$i] ?>" />
                                        ^^^
        </div>

        <div class="fieldgroup">
          <input type="text" id="etternavn_<?= $i+1 ?>" name="etternavn_<?= $i+1 ?>" 
                                               ^^^^                       ^^^^ 
                  value="<?= $arrEtternavn[$i] ?>" />
                                           ^^^
        </div>
      </div>

正如Martijn建议的那样,您始终可以使用isset()来确定数组索引是否存在。从您实现的逻辑开始,我认为您正在尝试确保该循环中的数组索引实际上保证设置,所以我猜它是上​​面描述的导致问题的小逻辑错误。

希望它有所帮助...