нечетные ошибки в массиве php

#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");
  

Довольно странно, что обе строки работают нормально и генерируют ожидаемый результат. Хотя обозначение без одинарных кавычек и фигурных скобок работает, я предлагаю использовать то, что кажется правильным, и использовать фигурные скобки и одинарные кавычки внутри строки.
В любом случае, прочитав документы и поразмыслив над этим некоторое время, я исправил это для меня. И да, к сожалению, все это есть прямо в руководстве!