比较循环内部的索引

时间:2016-10-25 23:23:59

标签: php

在我的PHP代码中,我有以下代码:

function readPopulateArray($name) {
    $you = explode(",", readSetUser($name));
    $singles = fopen("singles.txt", "r") or die("Unable to open file");

    //print_r($line[]);

    while(!feof($singles)) {
        $lineRead = fgets($singles);

        $matches = explode(",", $lineRead);
        if(($matches[0] != $you[0]) && ($matches[1] != $you[1]) && ($matches[3] == $you[3]) && ($matches[4] == $you[4])&& ($matches[5] <= $you[5] && $matches[6] >= $you[6])) 
        {
            echo $lineRead;
        }
    }

}

上述代码段的目的是将$ you与可能的$ match进行比较。这发生在if语句中,出于测试目的,我只想回显$ lineRead。但是,当我运行它时,我遇到以下错误:

  

“注意:未定义的偏移量:第47行/Applications/MAMP/htdocs/practice/matches-submit.php中的3”

第47行是if语句所在的行。我目前只是在学习php,但是,我很困惑为什么我收到此错误,因为我知道我可以通过调用$ matches [0]轻松访问$ matches和$ you的索引,这将返回名称, $ matches [1]性别等等这不是在php中将数组组件相互比较的方式吗?

我已经看到了array_map的提及,但我不需要简单的是/否类型的比较,而是确实需要更多。

编辑:singles.txt的样子:

Ada Lovelace,F,96,ISTJ,Linux,24,99
Adele Goldberg,F,65,ENFJ,Windows,50,70
Anakin Skywalker,M,27,INTJ,Linux,15,30
Angry Video Game Nerd,M,29,ISTJ,Mac OS X,1,99
Anita Borg,F,54,ISFP,Windows,41,55
Barbara Liskov,F,71,ESFJ,Mac OS X,41,76
Bill Gates,M,52,INTJ,Windows,2,99
Bill Joy,M,54,ENFP,Linux,50,70
...

1 个答案:

答案 0 :(得分:0)

您遇到此问题,因为索引不存在。

你做了爆炸。好。但如果你只有3个结果(例如:1,2,3)......那么你就无法阅读$matches[>2]

解决方案:

1.检查偏移/索引是否存在:

<?php 
$matches = explode(',', 'A,B,C,D');
if( isset($matches[3]) ) {
  echo $matches[3]; // here 'D';
}
if( isset($matches[5]) ) {
  echo $matches[5]; // here the result does not exists;
}
if( count($matches) > 2 ) { // multiple checks 
  echo $matches[0], $matches[1];
}

2.你可以使用一些小技巧,并添加一些额外的昏迷&#39;价值之后:

<?php 
$matches = explode(',', 'A,B,C,D' . ',,,,');

所以,你总会得到一些结果。在这里,我添加了4x,所以,我可以阅读索引0/1/2/3,没有任何问题

3.最后的事情(你应该从这开始!),尝试调试你的值啊检查这是否是预期的行为:

<?php 
$matches = explode(',', $lineRead);
var_dump($matches);