【发布时间】:2016-04-06 19:33:43
【问题描述】:
我正在尝试获取数组的特定部分并将其更改为 HTML,然后再将其发送回我的视图。
我相信该数组是 JSON - 我如何访问这些内容以将其更改为 HTML 的最佳方式是什么?
我的整个数组目前看起来像这样:
{"products":[{"id":8,"link":"http:\/\/www.mysite.com\/mydirectory\/prestashop\/trophies\/8-football-resin
.html","quantity":2,"image":"http:\/\/www.mysite.com\/mydirectory\/prestashop\/img\/p\/en-default-home_default
.jpg","image_cart":"http:\/\/www.mysite.com\/mydirectory\/prestashop\/img\/p\/en-default-cart_default
.jpg","priceByLine":"$40.00","name":"Football Resin","price":"$40.00","price_float":40,"idCombination"
:0,"idAddressDelivery":0,"is_gift":false,"hasAttributes":false,"hasCustomizedDatas":true,"customizedDatas"
:[{"customizationId":76,"quantity":1,"datas":[{"type":1,"datas":[{"index":0,"value":"%5B%5B%7B%22name
%22%3A%22trophy%5B1%5D%5Bline1%5D%22%2C%22engraving%22%3A%22ccc%22%7D%2C%7B%22name%22%3A%22trophy%5B1
%5D%5Bline2%5D%22%2C%22engraving%22%3A%22ddd%22%7D%2C%7B%22name%22%3A%22trophy%5B1%5D%5Bline3%5D%22%2C
%22engraving%22%3A%22dddd%22%7D%5D%5D","truncatedValue":"%5B%5B%7B%22name%22%3A%22..."}]}]},{"customizationId"
:77,"quantity":1,"datas":[{"type":1,"datas":[{"index":0,"value":"%5B%5B%7B%22name%22%3A%22trophy%5B1
%5D%5Bline1%5D%22%2C%22engraving%22%3A%22asdf%22%7D%2C%7B%22name%22%3A%22trophy%5B1%5D%5Bline2%5D%22
%2C%22engraving%22%3A%22dddasdf%22%7D%2C%7B%22name%22%3A%22trophy%5B1%5D%5Bline3%5D%22%2C%22engraving
%22%3A%22ddddddd%22%7D%5D%5D","truncatedValue":"%5B%5B%7B%22name%22%3A%22..."}]}]}]}],"discounts":[]
,"shippingCost":"$7.00","shippingCostFloat":7,"wrappingCost":"$0.00","nbTotalProducts":2,"total":"$47
.00","productTotal":"$40.00","freeShipping":"$0.00","freeShippingFloat":0,"free_ship":false,"isVirtualCart"
:false,"hasError":false,"crossSelling":""}
我感兴趣的部分是customizedDatas 中的“值”(我以这种方式对其进行了格式化,以便更容易阅读):
"customizedDatas"
:
[
{
"customizationId":76,
"quantity":1,
"datas":
[{
"type":1,
"datas":
[{
"index":0,"value":"%5B%5B%7B%22name
%22%3A%22trophy%5B1%5D%5Bline1%5D%22%2C%22engraving%22%3A%22ccc%22%7D%2C%7B%22name%22%3A%22trophy%5B1
%5D%5Bline2%5D%22%2C%22engraving%22%3A%22ddd%22%7D%2C%7B%22name%22%3A%22trophy%5B1%5D%5Bline3%5D%22%2C
%22engraving%22%3A%22dddd%22%7D%5D%5D","truncatedValue":"%5B%5B%7B%22name%22%3A%22..."
}]
}]
},
您可以看到“值”是一堆编码/序列化的 JSON。我需要从数组中提取它,将其部分转换为 HTML,然后将其转储回数组并完成将其传递给视图。
我已经更改了前端的一些部分来执行此操作,但是有很多地方需要此信息 - 所以我尝试在控制器中执行此操作,以便它在任何地方都能很好地显示,而不是尝试更新数十个整个前端的代码位。
在前端 - 这有效:
{if isset($customization.datas.$CUSTOMIZE_TEXTFIELD.0)}
{$encoded_values = $customization.datas.$CUSTOMIZE_TEXTFIELD.0.value}
{$decoded_url_values = urldecode($encoded_values)}
{$json_values = json_decode($decoded_url_values)}
{$json_key_values=array_keys($json_values)}
{foreach $json_values as $orderItems }
<h6 class="item-cart-title">{l s='Item '}{$orderItems@index+1}</h6>
<ul>
{foreach $orderItems as $orderItem }
<li class="item-cart-engraving">{l s='Line '}{$orderItem@index+1} : {$orderItem->engraving}</li>
{/foreach}
</ul>
{/foreach}
如何获取上述数组中“值”的数据?
目前customizedDatas是这样构建的:
$customized_datas[(int)$row['id_product']][(int)$row['id_product_attribute']][(int)$row['id_address_delivery']][(int)$row['id_customization']]['datas'][(int)$row['type']][] = $row;
所以我知道 ['datas'] 是我想要的 - 但是访问该数组内的对象的最佳方式是什么?
【问题讨论】:
-
如果您选择投反对票 - 请告诉我原因,以便我知道我是否做错了什么。
-
您发布的“数组”是一个 JSON 字符串。你说的 PHP 数组存储在哪里?
-
@Hanny 我同意并为此投了赞成票。不确定我能帮忙,但现在检查一下你的代码。
-
["products"][0]["customizedDatas"][0]["datas"][0]["datas"][0]["value"]
标签: php arrays json object prestashop