У меня возникает небольшая проблема, когда я пытаюсь получить несколько значений массива в PHP для проверки. У меня есть этот объект со значениями в исходной форме POSTMAN, application/json:
{
"name":"create_insert_new_delivery",
"param":{
"email_of_shipment_owner":"[email protected]",
"shipment_type ":"B",
"item_name": ["50", "60"],
"item_weight ": ["H", "I"],
"item_length": ["70", "90"]
}
}
Когда я пытаюсь получить $ item_name = $ this-> validateParameter ('имя_элемента', $ this-> param ['имя_элемента'], ARRAY, true); типа две строки ниже, я получаю это
**ОШИБКА : **
[04-Jul-2018 13:16:58 UTC] PHP Parse error: syntax error, unexpected ',', expecting '(' in /home/osconliz/public_html/Osconlizapicall/api.php on line 304
Код получения ниже.
ЛИНИЯ 302
$email_of_shipment_owner = $this->validateParameter('email_of_shipment_owner', $this->param['email_of_shipment_owner'], STRING, true);
ЛИНИЯ 303
$shipment_type = $this->validateParameter('shipment_type', $this->param['shipment_type'], STRING, true);
ЛИНИЯ 304
$item_name = $this->validateParameter('item_name', $this->param['item_name'], ARRAY, true);
ЛИНИЯ 305
$item_weight = $this->validateParameter('item_weight', $this->param['item_weight'], ARRAY, true);
ЛИНИЯ 306
$item_length = $this->validateParameter('item_length', $this->param['item_length'], ARRAY, true);
но СТРОКИ принимаются правильно:
public function validateParameter($fieldName, $value, $dataType, $required = true){
switch ($dataType) {
case BOOLEAN:
if (!is_bool($value)){
$this->throwError(VALIDATE_PARAMETER_DATATYPE, "Datatype is not valid for " . $fieldName . ' it should be boolean.');
}
break;
case INTEGER:
if (!is_numeric($value)){
$this->throwError(VALIDATE_PARAMETER_DATATYPE, "Datatype is not valid for " . $fieldName . ' it should be integer.');
}
break;
case STRING:
if (!is_string($value)){
$this->throwError(VALIDATE_PARAMETER_DATATYPE, "Datatype is not valid for " . $fieldName . ' it should be string.');
}
break;
case ARRAY:
if (!is_array($value)){
$this->throwError(VALIDATE_PARAMETER_DATATYPE, "Datatype is not valid for " . $fieldName . ' it should be array.');
}
break;
default:
$this->throwError(VALIDATE_PARAMETER_DATATYPE, "Datatype is not valid for " . $fieldName);
break;
}
return $value;
}
После получения я хочу проверить такие данные
if ($this->item_category == ""){
} else {
if ($this->item_category == "A" || $this->item_category == "B" || $this->item_category == "C" || $this->item_category == "D" || $this->item_category == "E" || $this->item_category == "F" || $this->item_category == "G" || $this->item_category == "H") {
} else {
$this->throwError(INVALID_DATA_TTT, "Invalid item category");
exit();
}
}
@loek Спасибо, но это правильный способ получить "$ item_name = $ this-> validateParameter ('item_name', $ this-> param ['item_name'], ARRAY, true);" формат массива.
@loek предыдущие строки, прежде чем они не содержат синтаксической ошибки
На самом деле это очень логично, но я этого совсем не ожидал. Смотрите мой ответ.
@loek, спасибо за ответ, но не могли бы вы привести пример, потому что я не понимаю "Это потому, что ARRAY явно нечувствителен к регистру функций для создания массивов", особенно в этой части "Самый простой способ исправить это - просто выбрать другой ключевое слово, я думаю? " массив причин является форматом приема, как и строка th, указанная выше.
Это означает, что вы не можете использовать слово «массив», потому что PHP всегда будет читать его как функцию для создания массивов. Вы можете заменить его чем угодно, кроме ключевого слова, например ARRAYS или JSON_ARRAY, и он должен работать. Не забудьте также изменить его в операторе switch.
@loek Это решило проблему, но как мне затем разбить массив для проверки, я сделал обновление.
Это совершенно другой вопрос, пожалуйста, создайте для этого новый пост. Также подумайте о том, чтобы пометить как ответ, чтобы другие люди могли получить пользу.






Это связано с тем, что ARRAY, по-видимому, является функция без учета регистра для создания массивов. Смотрите здесь: https://3v4l.org/keu3K
Самый простой способ исправить это - просто выбрать другое ключевое слово, я думаю?
РЕДАКТИРОВАТЬ - Для справки, все зарезервированные ключевые слова и функции в php: https://secure.php.net/manual/en/reserved.keywords.php
После ошибки это не имеет ничего общего с вашей логикой, это просто
,, который где-то плавает. Но я этого еще не заметил.