【问题标题】:Accessing JSON inside a PHP array在 PHP 数组中访问 JSON
【发布时间】: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


【解决方案1】:

您说有一个数组,但您发布了一个字符串 - 带有破坏 JSON 格式的无关换行符 - 所以我不确定您的 JSON 实际在哪里。但是假设您可以将格式正确的 JSON 转换为字符串,您可以使用 json_decode 函数将其转换为 PHP 数组。

$data = json_decode($json_string_goes_here);

然后你就拥有了一个 PHP 数组,你可以像访问其他数组一样访问它。例如,可能是这样的:

foreach ($data['products'][0]['customizedDatas'] as $custom) {
  echo("Customization $custom[customizationId]:");
  foreach ($custom['datas'] as $datum) {  
    echo("Data type: $datum[type]");
    echo("Subdata:");
    print_r($datum['datas']);
  }
}

【讨论】:

  • 谢谢马克。这是我需要前进的方向 - 感谢您的意见。
【解决方案2】:

目前您的 json 数组看起来不正确。你的数组中有一些不正确的东西。如果你的 josn 数组很好,那么你可以这样做。

    $JSONdecodedarray = json_decode($yourJsonArray);
    echo "<pre>";
    print_r($JSONdecodedarray);
    echo "</pre>";

这样您就可以轻松跟踪所需的索引。

【讨论】:

  • 这是换行符/换行符。删除它们以获得有效的 json。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 2017-10-28
相关资源
最近更新 更多