【问题标题】:PHP Error Undefined OffsetPHP错误未定义的偏移量
【发布时间】:2014-03-13 04:15:31
【问题描述】:

收到通知:未定义的偏移量:25 英寸 C:\wamp\www\finalProjectDemo\search.php 第 32 行

我正在尝试从文件中读取并在其中搜索特定名称和地址以进行输出。我知道数据库是最好的。这是针对我正在分发的专门设置为以这种方式工作的课堂作业。我相信我几乎拥有一切,但只是遇到了这个问题。对 PHP 相当陌生。

我有这个代码:

<html>
<body>
<?php
// read lines into array
// search array for string
// get 7 lines from there.
$i = 0;
$fileName = "addresses.txt";
$readFile = fopen($fileName, 'r');
$readByLineArray = array();

// Get search string from submission
$searchFirstName = $_POST['searchFirstName'];
$searchLastName = $_POST['searchLastName'];
$searchFirstNameSuccess = 0;
$searchLastNameSuccess = 0;

while (!feof($readFile))
{
    $readByLineArray[$i] = fgets($readFile);

//echo "$readByLineArray[$i] read from array position $i";
//echo "<br />";
$i++;
}
fclose($readFile);

$arrLength = count($readByLineArray);
$currentArrayPosition = 0;

for ($x=0;$x<=$arrLength;$x++){
    if ($searchFirstName == $readByLineArray[$x])
    {
        $searchFirstNameSuccess = 1;
        $x++;
        if ($searchLastName == $readByLineArray[$x])
        {
            $searchLastNameSuccess = 1;
            $currentArrayPosition = $x - 1;
        } else {
            $searchFirstNameSuccess = 0;
        }
    }


}

for ($y=0;$y<=7;$y++){
    echo "$readByLineArray[$currentArrayPosition]<br />";
    $currentArrayPosition++;
}





?>
</body>
</html>

感谢您的帮助!

本---

【问题讨论】:

    标签: php undefined offset


    【解决方案1】:

    试试 foreach :-

    foreach ($readByLineArray as $temp){
    if ($searchFirstName == $temp)
    {
        $searchFirstNameSuccess = 1;
        $x++;
        if ($searchLastName == $temp)
        {
            $searchLastNameSuccess = 1;
    
        } else {
            $searchFirstNameSuccess = 0;
        }
    }
    }
    

    【讨论】:

      【解决方案2】:

      像这样改变你的for循环..

      for ($x=0;$x<$arrLength;$x++){ //<--- Should be < and not <=
      

      如果你的数组计数是 3 ,那么数组元素键排列为0,1,2。当您将&lt;= 作为条件放入循环中时,您的代码将检查索引为3 的不存在的键,这将引发Undefined Offset 通知。

      EDIT :

      更简单的方法....

      <html>
      <body>
      <?php
      $fileName = "addresses.txt";
      
      // Get search string from submission
      $searchFirstName = $_POST['searchFirstName'];
      $searchLastName = $_POST['searchLastName'];
      $searchFirstNameSuccess = 0;
      $searchLastNameSuccess = 0;
      
      foreach(file($fileName) as $recno=>$records)
      {
          if(stripos($records,$searchFirstName)!==false && stripos($records,$searchLastName)!==false)
          {
              $searchFirstNameSuccess = 1;
              $searchLastNameSuccess = 1;
              echo "Match Found at Position : $recno";
              break;
            }
      }
      
      ?>
      </body>
      </html>
      

      【讨论】:

      • 我的 if 语句部分似乎也有问题。之前的调整修复了之前的问题,但无论我做什么,它似乎都没有成功比较并且对于读入的每一行。
      • 其实在这个例子中你想做什么,看起来你可以做得更容易。
      • 对不起。我读错了你的回复。我试图让我的嵌套 IF 语句将 $searchFirstName 与 $readByLineArray[$x] 进行比较。它基本上是读取已写入 txt 文件的姓名和地址,并与搜索字符串进行比较以仅输出该人的姓名和地址。我知道数据库会更简单,但我没有那么奢侈,我正在尝试仅使用文本文档来创建类似的东西。
      • 那么你正在做的是.. 逐行检查数组中的名字和姓氏,如果找到匹配项,你应该从数组中中断吗?
      猜你喜欢
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多