2013-08-05 2 views
-1

я написал такой код в функции:Undefined смещение: 0 ..., хотя это определено

preg_match_all('/{ali\s+([^}\s]+)\s*}/', $row->text, $matches, PREG_SET_ORDER); 
$m=$matches[0][1]; 

Когда я пишу это:

$row->text=$m; 

Он возвращает значение (например, "имя" в "{имя али}" и "идентификатор" в "{али идентификатор}"), но когда я это пишу:

$a->name='hasan'; 
$a->id='14'; 
$row->text=$a->$m; 

Он говорит:

Notice: Undefined offset: 0 in ... on line 2 

В чем проблема ?! Я тестировал существование пробелов, вкладок и т. Д. В строке, но их не было!

+1

Заменить '$ row-> текст = $ а -> $ м;' с '$ row-> текст = $ a-> т;' –

+1

Ну сделать ' print_r ($ matches) ', чтобы увидеть структуру массива, и на основе результата вы затем создадите свой код. Просто. – HamZa

+0

Пожалуйста, переименуйте название. Когда что определено? –

ответ

1

Попробуйте с isset() проверки

if(isset($matches[0][1])){ 
//Code here 
} 
+0

Или еще лучше проверить возвращаемое значение 'preg_match_all'. – cmbuckley

+0

Я знаю, что существует! Он возвращает мою строку, когда я использую $ row-> text = $ m; – user1904238

+0

Попробуйте print_r ($ matches) и проверьте, что $ match [0] или $ matches [0] [1] существует или нет после preg_match() –

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