#php #arrays #json #string
#php #массивы #json #строка
Вопрос:
У меня есть 3 таких входа:
<input type="text" name="product[1][name]" >
<input type="text" name="product[1][cost]" >
<input type="text" name="product[1][qty]" >
… который продолжается до n продуктов
<input type="text" name="product[n][name]" >
<input type="text" name="product[n][cost]" >
<input type="text" name="product[n][qty]" >
и на основе входного значения создается строка JSON, подобная этой:
{"product[1][name]": "Prod1", "product[1][cost]": "100$", "product[1][qty]": "3", "product[2][name]": "Prod2", ... }
как я могу получить их имя и значение, потому что ни json_decode
одна функция не может принимать их значения из-за имени, подобного массиву
$decodedObject=json_decode($array['data']); // this data contains the json string
echo $decodedObject->product; // does not work
echo $decodedObject->product[1][qty]; // does not work
есть ли какой-нибудь простой способ?
Или единственный способ — вырезать имя, например product[
, взять внутренние элементы и значение после :
и так далее?
Но как я могу даже извлечь из него объект, не сообщая PHP, что это не массив?
Комментарии:
1. Как вы создаете этот JSON?
2. @El_Vanja JSON создается из формы, каждый ввод формы берется и преобразуется в строку JSON, а затем загружается в базу данных. Я хочу получить «product [x] [name]» из этой строки JSON, которую я возьму из базы данных.
3. Какой параметр запроса вы используете для извлечения значений формы? Я думаю, вам было бы лучше обработать этот массив в надлежащий объект JSON и сохранить его в БД для последующего восстановления.
4. @Alex. Я отправляю данные формы в AJAX-скрипт, который вставляет их в базу данных как тип данных VARCHAR, если это был вопрос 🙂
5. @Lepy Почему вы хотите сделать его JSON, а затем отправить на сервер? Почему бы просто не сделать сообщение в форме HTML?
Ответ №1:
Сначала я нашел альтернативу. Проблема в том, что это:
$decodedObject=json_decode($array['data']); // will create an object
не будет преобразовывать его в массив, вместо этого я использовал это:
$decodedObject=json_decode($array['data'], true); // will create an array
после этого я проверил, сколько объектов существует, а затем просто добавил их в другой массив:
$i=1;
while(isset($decodedObject["product[$i][qty]"])) // while any element exists
{
$newProducs= array();
$newProducs['name'] = $decodedObject["product[$i][name]"];
$newProducs['cost'] = $decodedObject["product[$i][cost]"];
$newProducs['qty'] = $decodedObject["product[$i][qty]"];
array_push($products, $newProducs); // optional: add to the main array (products) the new-created array (newProducs)
$i ; //increment to search another product
}
Проблема заключалась в том, что я не полностью создавал массив -_-
Хотя это не полный ответ, я все же надеюсь, что кто-нибудь найдет лучшее решение, а не изменение.