2016-04-06 25 views
0

配列の特定の部分を取得し、HTMLに変更してビューに送り返そうとしています。PHP配列内のJSONへのアクセス

私は配列が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 '}{[email protected]+1}</h6> 
      <ul> 
     {foreach $orderItems as $orderItem } 
      <li class="item-cart-engraving">{l s='Line '}{[email protected]+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; 

だから私は、[「件のデータ」]知っているが、私が欲しいものである - しかし、その配列の内部のオブジェクトにアクセスするための最良の方法は何ですか?

+1

あなたがdownvoteを選択した場合 - なぜ私が間違って何かをしたのか知っている理由を教えてください。 – Hanny

+0

投稿した「配列」はJSON文字列です。 PHP配列はどこに格納されていますか? –

+0

@ハニー私はその理由のために同意しupvoted。私は今あなたのコードをチェックアウトすることができますか分からない。 – jDo

答えて

0

あなたは配列があると言いましたが、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']); 
    } 
} 
+0

ありがとうございます。これは私が頭を下ろす必要がある方向です - あなたのご意見に感謝します。 – Hanny

0

現在、jsonアレイが正しく表示されていません。あなたの配列に何かが間違っています。あなたがjosn配列がうまくいけば、このようにすることができます。

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

この方法で、必要なインデックスを簡単に追跡できます。

+0

改行/改行です。それらを削除して有効なjsonを取得します。 – jDo

関連する問題