странные ошибки в массиве php - PullRequest
2 голосов
/ 20 апреля 2011

Я пытаюсь 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:\wamp\www\serializer.php on line 2

Notice: Use of undefined constant Price - assumed 'Price' in C:\wamp\www\serializer.php on line 3

Notice: Use of undefined constant Type - assumed 'Type' in C:\wamp\www\serializer.php on line 4

Notice: Use of undefined constant Title - assumed 'Title' in C:\wamp\www\serializer.php on line 6

Notice: Use of undefined constant Price - assumed 'Price' in C:\wamp\www\serializer.php on line 7

Notice: Use of undefined constant Type - assumed 'Type' in C:\wamp\www\serializer.php on line 8

Notice: Use of undefined constant Title - assumed 'Title' in C:\wamp\www\serializer.php on line 10

Notice: Use of undefined constant Price - assumed 'Price' in C:\wamp\www\serializer.php on line 11

Notice: Use of undefined constant Type - assumed 'Type' in C:\wamp\www\serializer.php on line 12

Ответы [ 6 ]

9 голосов
/ 20 апреля 2011

Вам нужно процитировать ключи.Без кавычек они константы.Переводчик угадывает, что вы имеете в виду, но вы должны изменить его, чтобы избежать уведомления.

$products = array( array( "Title" => "rose", 
                  "Price" => "1.25,1.31,1.54,1.39",
                  "Type" => "dropdown"
                ),
2 голосов
/ 20 апреля 2011

Вы должны использовать кавычки для ключей STRING в массивах. Ваш код с изменениями показан ниже:

<?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: Массивы

1 голос
/ 11 октября 2014

Я столкнулся с точно такой же проблемой, и после того, как заглянул на страницу руководства по 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");

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

1 голос
/ 20 апреля 2011

Возможно, вы здесь путаете синтаксис нотации объектов javascripts с PHP, как и предлагали другие ответы, завершение ключей массива в кавычки (чтобы они передавались как строки) решит вашу проблему.

Возможно, стоит прочитать константы PHP, чтобы лучше понять сообщение об ошибке, которое вы получили: http://php.net/manual/en/language.constants.php

1 голос
/ 20 апреля 2011
    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"
                )
         );
1 голос
/ 20 апреля 2011

ставьте кавычки вокруг имен ключей массива

$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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...