#php #arrays #multidimensional-array
#php #массивы #многомерный массив
Вопрос:
Я пытаюсь закодировать массив в формате json, он кодирует, но я получаю много ошибок:
$products = array( array( Title => "rose",
Price => "1.25,1.31,1.54,1.39",
Type => "dropdown"
),
array( Title => "daisy",
Price => "0.75",
Type => "text_field",
),
array( Title => "orchid",
Price => "1.15",
Type => "text_field"
)
);
echo json_encode($products);
Я получаю следующие ошибки.
Notice: Use of undefined constant Title - assumed 'Title' in C:wampwwwserializer.php on line 2
Notice: Use of undefined constant Price - assumed 'Price' in C:wampwwwserializer.php on line 3
Notice: Use of undefined constant Type - assumed 'Type' in C:wampwwwserializer.php on line 4
Notice: Use of undefined constant Title - assumed 'Title' in C:wampwwwserializer.php on line 6
Notice: Use of undefined constant Price - assumed 'Price' in C:wampwwwserializer.php on line 7
Notice: Use of undefined constant Type - assumed 'Type' in C:wampwwwserializer.php on line 8
Notice: Use of undefined constant Title - assumed 'Title' in C:wampwwwserializer.php on line 10
Notice: Use of undefined constant Price - assumed 'Price' in C:wampwwwserializer.php on line 11
Notice: Use of undefined constant Type - assumed 'Type' in C:wampwwwserializer.php on line 12
Ответ №1:
Вам нужно заключить ключи в кавычки. Без кавычек они являются константами. Интерпретатор догадывается, что вы имеете в виду, но вам следует изменить это, чтобы избежать уведомления.
$products = array( array( "Title" => "rose",
"Price" => "1.25,1.31,1.54,1.39",
"Type" => "dropdown"
),
Ответ №2:
вы должны использовать кавычки для строковых ключей в массивах. Ваш код с изменениями показан ниже:
<?php $products = array( array( 'Title' => "rose",
'Price' => "1.25,1.31,1.54,1.39",
'Type' => "dropdown"
),
array( 'Title' => "daisy",
'Price' => "0.75",
'Type' => "text_field",
),
array( 'Title' => "orchid",
'Price' => "1.15",
'Type' => "text_field"
)
); echo json_encode($products);
Дополнительную информацию о массивах в php вы найдете здесь PHP: Массивы
Ответ №3:
заключите имена ключей массива в кавычки
$products = array( array( 'Title' => "rose",
'Price' => "1.25,1.31,1.54,1.39",
'Type' => "dropdown"
),
array( 'Title' => "daisy",
'Price' => "0.75",
'Type' => "text_field",
),
array( 'Title' => "orchid",
'Price' => "1.15",
'Type' => "text_field"
)
);
echo json_encode($products);
Ответ №4:
array( array( 'Title' => "rose",
'Price' => "1.25,1.31,1.54,1.39",
'Type' => "dropdown"
),
array( 'Title' => "daisy",
'Price' => "0.75",
'Type' => "text_field",
),
array( 'Title' => "orchid",
'Price' => "1.15",
'Type' => "text_field"
)
);
Ответ №5:
Возможно, вы путаете синтаксис объектной нотации javascripts с PHP здесь, как и предлагалось в других ответах, заключение ключей массива в кавычки (чтобы они передавались в виде строк) решит вашу проблему.
Возможно, стоит ознакомиться с константами PHP, чтобы лучше понять сообщение об ошибке, которое вы получили:http://php.net/manual/en/language.constants.php
Ответ №6:
Я столкнулся с точно такой же проблемой, и, просмотрев страницу руководства 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, ответ прямо там. При доступе к значениям массива в строке, заключенной в двойные кавычки, вы должны заключить конструкцию array value в фигурные скобки (усы). Как оказалось, вот как это правильно:
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");
Довольно странно, что обе строки работают нормально и генерируют ожидаемый результат. Хотя обозначение без одинарных кавычек и фигурных скобок работает, я предлагаю использовать то, что кажется правильным, и использовать фигурные скобки и одинарные кавычки внутри строки.
В любом случае, прочитав документы и поразмыслив над этим некоторое время, я исправил это для меня. И да, к сожалению, все это есть прямо в руководстве!