2016-04-06 24 views
0

Ich versuche, einen bestimmten Teil eines Arrays zu erhalten und in HTML zu ändern, bevor ich es an meine Ansicht zurücksende.Zugriff auf JSON in einem PHP-Array

Ich glaube, das Array ist JSON - wie ist der beste Weg für mich, Zugriff auf dieses Zeug, um es in HTML zu ändern?

Meine ganze Reihe sieht wie folgt zur Zeit:

{"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":""} 

Der Teil I in immer interessiert bin, ist der ‚Wert‘ in den customizedDatas (ich es formatiert, dass die Art und Weise, so konnte ich leichter es lesen):

"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..." 
      }] 
     }] 
    }, 

Sie können sehen, der 'Wert' ist eine Reihe von codierten/serialisierten JSON. Ich muss das aus dem Array ziehen, die Teile davon in HTML konvertieren und dann wieder in das Array zurückgeben und es an die Ansicht übergeben.

Ich habe einige Teile am Front-End geändert, um es zu tun, aber es gibt zahlreiche Stellen, die diese Informationen erfordern - also versuche ich es im Controller zu tun, so dass es überall schön angezeigt wird anstatt zu versuchen, Dutzende zu aktualisieren von Bits von Code im gesamten Frontend.

Am vorderen Ende - das funktioniert:

{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} 

Wie komme ich an die Daten für den ‚Wert‘ in der obigen Array?

Derzeit ist das customizedDatas wie folgt aufgebaut:

$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; 

So weiß ich [ ‚Daten‘] ist das, was ich will - aber was ist der beste Weg, um die Objekte innerhalb des Arrays zuzugreifen?

+1

Wenn Sie wählen, um zu downvote - bitte geben Sie mir einen Grund, warum ich weiß, ob ich etwas falsch gemacht habe. – Hanny

+0

Das "Array", das Sie gepostet haben, ist eine JSON-Zeichenfolge. Wo ist das PHP-Array, in dem Sie sagen, dass es gespeichert ist? –

+0

@Hanny Ich stimme zu und upvoted nur aus diesem Grund. Ich bin mir nicht sicher, ob ich Ihnen helfen kann, aber jetzt Ihren Code überprüfen. – jDo

Antwort

0

Sie haben gesagt, dass es ein Array gibt, aber Sie haben eine Zeichenkette geschrieben - mit überflüssigen Zeilenumbrüchen, die das JSON-Format brechen - also bin ich mir nicht sicher, wo Ihr JSON eigentlich ist. Aber vorausgesetzt, Sie können JSON richtig formatiert in eine Zeichenfolge konvertieren, können Sie es in ein PHP-Array mit der json_decode-Funktion verwandeln.

$data = json_decode($json_string_goes_here); 

Dann haben Sie nur eine PHP-Array, das Sie wie jede andere zugreifen können. Zum Beispiel, vielleicht so etwas wie das:

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

Danke Mark. Dies ist die Richtung, in die ich gehen musste - ich schätze Ihre Eingabe. – Hanny

0

Derzeit Ihre JSON-Array nicht richtig aussieht. Ihr Array enthält etwas Falsches. Wenn Sie Array ausrichten ist in Ordnung, dann können Sie es so machen.

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

Auf diese Weise können Sie leicht Ihren erforderlichen Index verfolgen.

+0

Es sind die Zeilenumbrüche/Zeilenumbrüche. Löschen Sie sie, um einen gültigen JSON zu erhalten. – jDo