2016-10-25 2 views
1

В моем 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; 
     } 
    } 

}

Цель фрагменте кода выше, сравнить $ вас с возможными $ спичек. Это происходит в инструкции if, и для целей тестирования я просто хочу повторить $ lineRead. Тем не менее, когда я запускаю его, возникает следующая ошибка:

"Notice: Undefined offset: 3 in /Applications/MAMP/htdocs/practice/matches-submit.php on line 47"

Строка 47 - это строка, в которой находится оператор if. В настоящее время я просто изучаю php, однако я смущен тем, почему я получаю эту ошибку, потому что знаю, что я могу легко получить доступ к индексам $ matches и $ you, просто позвонив $ matches [0], который вернет имя, $ matches [1] пол и т. д. это не способ сравнения компонентов массива друг с другом в php?

Я видел упоминание array_map, но мне не нужен простой метод сравнения да/нет, но он требует немного больше.

Edit: Пример того, как 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 
... 
+3

Любая специальная причина, по которой вы не используете базу данных? и текстовые файлы - это так много работы по сравнению с db. –

+0

нужно будет увидеть образец файла singles.txt, чтобы иметь возможность помочь – nogad

+0

Ошибка говорит вам, что $ matches [3] или $ you [3] не существует. Print_r ($ matches) и переменные $ you, чтобы проверить, что они вернут. –

ответ

0

Вы получили этот вопрос, потому что индекс не существует.

Вы сделали взрыв. ОК. Но если у вас есть только 3 результата (например: 1, 2, 3) ... поэтому вы не можете прочитать $matches[>2].

Решения:

1.check, если смещение/индекс существует:

<?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.You может использовать немного советов, а также добавить некоторые дополнительные 'кома' после значения:

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

Итак, у вас всегда будут результаты. Здесь я добавил 4 раза, поэтому я могу читать индекс 0/1/2/3 без каких-либо проблем.

3.Last thing (вы должны начать с этого!), Попробуйте отладить ваши значения ahd, проверьте, является ли это ожидаемое поведение:

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

Нашел проблему с индексом, оказалось, что появилась новая строка. – SomeStudent

Смежные вопросы