Я столкнулся с точно такой же проблемой, и после того, как заглянул на страницу руководства по PHP5 для массивов, он в итоге щелкнул. Вот что я узнал:
Эта строка
If ($showallresult[Composer] == "") $showallresult[Composer] = "?";
приведет к отображению этого уведомления.
Я также использую эту строку в своем коде
print ("<TD ALIGN=CENTER VALIGN=TOP>$showallresult[Composer]</TD>\n");
Когда я заключаю ключ массива в одинарные кавычки в каждой строке как таковые
If ($showallresult['Composer'] == "") $showallresult['Composer'] = "?";
print ("<TD ALIGN=CENTER VALIGN=TOP>$showallresult['Composer']</TD>\n");
Я получаю ошибку разбора во второй строке, но с первой строкой все в порядке. Глядя на http://us2.php.net/manual/en/function.array.php и там, в Примере № 4, ответ тут же. При доступе к значениям массива в строке в двойных кавычках вы должны заключить конструкцию значения массива в фигурные скобки (усы). Оказывается, вот как это правильно:
If ($showallresult['Composer'] == "") $showallresult['Composer'] = "?";
print ("<TD ALIGN=CENTER VALIGN=TOP>{$showallresult['Composer']}</TD>\n");
Как ни странно, это работает также без разбора ошибок или уведомлений ... добро пожаловать в логику PHP:
If ($showallresult['Composer'] == "") $showallresult['Composer'] = "?";
print ("<TD ALIGN=CENTER VALIGN=TOP>$showallresult[Composer]</TD>\n");
Довольно странно, что обе строки работают нормально и дают ожидаемый результат. Хотя нотация «без одинарных кавычек, без фигурных скобок» работает, я предлагаю перейти к тому, как она кажется правильной, и использовать фигурные скобки и одинарные кавычки в строке.
В любом случае, чтение документов и обдумывание их какое-то время помогло мне. И да, к сожалению, все это прямо в руководстве!