Неопределенное смещение в PHP

#php #preg-match

#php #предварительное совпадение

Вопрос:

Когда я попробовал следующий код:

 function getusername($input){
    //parse the result
    preg_match("/<username>(.*)?</username>/", $input, $username);
    return $username[1]; // Line 4
}  
  

Это выдало мне эту ошибку:

Неопределенное смещение в строке 4.

Комментарии:

1. Вы уверены, что $input соответствует вашему регулярному выражению?

2. Было бы полезно, если бы вы добавили $ input, на котором вы запускаете функцию.

3. Просто мысль (я уже поддержал ответ), похоже, вы анализируете XML, так почему бы вместо этого не использовать SimpleXML?

4. @All: Я передавал неправильный XML. Спасибо вам всем.

5. @Tomalakgeret’kal: Я принимаю, что это все же другой вопрос Subbish. Как я упоминал в вопросе, я даже не знаком с PHP и должен был работать с небольшим количеством PHP-кода. Спасибо за ваши комментарии, которые помогли мне и дали мне знать, что это еще один сложный вопрос.

Ответ №1:

Какую ошибку я делаю?

Ну, кажется, $username[1] этого не существует. Это может произойти, если регулярное выражение не совпадает. Я бы изменил его на:

 function getusername($input){
    preg_match("/<username>(.*)?</username>/", $input, $username);
    if( count( $username ) > 0 ) {
        return $username[1];
    }
    return false;
}
  

Комментарии:

1. Или даже if (preg_match("/<username>(.*)?</username>/", $input, $username)) { return $username[1]; } return false; since preg_match возвращает количество совпадений.

2. не должно count($matches) быть count($username) ?

Ответ №2:

Это означает, что вы пытаетесь получить доступ к ключу в массиве, который не существует. Итак, похоже, что ваша $username переменная не имеет ключа 1. Помните, что в программировании вы обычно начинаете отсчет с 0, поэтому первым значением будет $username[0] .

Вы можете визуализировать свою переменную username, вызвав var_dump , как таковую:

var_dump($username);

Ответ №3:

Возможны различные варианты.

1.) Сайт, к которому вы пытаетесь получить доступ, не допускает ботов или имеет какую-либо функцию безопасности, которая может помешать боту получить доступ к сайту. Чтобы проверить, перенаправляет сайт или нет, выведите / echo переменную, в которой у вас хранятся все данные.

2.) Текстовое выражение записано не в правильном формате, логически неверно, когда оно выдает результат в виде пустого набора.