是什么原因:"注意:未初始化的字符串偏移"出现?

Tom*_*icz 58 php arrays

我有一个用户填写的表单,并在表单上有多个相同的字段,如"项目名称","项目日期","catagory"等.根据用户提交的表单数量,我的目标是:

  1. 循环遍历表格的数量
  2. 创建单独的SQL插入语句

但是,PHP向我发出了一条我似乎不明白的通知:

注意:

注意:未初始化的字符串偏移:第90行的1 ... dataPasser.php

PHP

$myQuery = array();

if ($varsCount != 0)
{
  for ($i=0; $i <= $varsCount; $i++)
  {
    $var = "insert into projectData values ('" . $catagory[$i] . "', '" .  $task[$i] . "', '" . $fullText[$i] . "', '" . $dueDate[$i] . "', null, '" . $empId[$i] ."')";
    array_push($myQuery, $var);     
  }
}
Run Code Online (Sandbox Code Playgroud)

我有这个问题的参考,但它们并不准确,我无法推断实际问题源于何处.我非常感谢任何有助于理解导致数组未正确初始化的原因.

zom*_*bat 58

如果以下任何变量实际上是字符串或null而不是数组,则会发生此错误,在这种情况下,使用数组语法访问它们$var[$i]就像尝试访问字符串中的特定字符一样:

$catagory
$task
$fullText
$dueDate
$empId
Run Code Online (Sandbox Code Playgroud)

简而言之,插入查询中的所有内容.

也许$catagory变量拼写错误?


cle*_*tus 15

这意味着你的一个数组实际上不是一个数组.

顺便说一下,你的if检查是不必要的.如果$ varsCount为0,则for循环无论如何都不会执行.


arg*_*m47 9

迭代数组的次数大于数组的实际大小时,可能会发生错误.例如:

 $one="909";
 for($i=0;$i<10;$i++)
    echo ' '.$one[$i];
Run Code Online (Sandbox Code Playgroud)

将显示错误.第一种情况你可以采取我的mod ..例如

function mod($i,$length){
  $m = $i % $size;
  if ($m > $size)
  mod($m,$size)
  return $m;
}

for($i=0;$i<10;$i++)
{
  $k=mod($i,3);
  echo ' '.$one[$k];
}
Run Code Online (Sandbox Code Playgroud)

或者可能不是数组(也许它是一个值,你试图像数组一样访问它),例如:

$k = 2;
$k[0];
Run Code Online (Sandbox Code Playgroud)