2016-11-20 2 views
0

В PHP я следующий массив:Формат PHP массив хорошо отформатированный массива/объекта для JavaScript

$variation = [ 
attribute_label => "Choose your Color", 
attribute_name => "pa_choose-your-color", 
variations => [ 
        "819" => "Red", 
        "820" => "Blue", 
        "821" => "Green" 
       ] 
]; 

Я посылаю этот массив JSON закодированный обратно на мой призыв Ajax.

После json_encode массив выглядит следующим образом:

Javascript

Этот вид массива не очень удобно для зацикливания в JavaScript.

В цикле я добавляю атрибут_label к метке перед полем выбора и атрибут_имя к атрибуту идентификатора данных для поля выбора, варианты - это опции в поле выбора. Ключи вариантов не являются необязательными, они являются идентификаторами вариантов и используются для добавления к идентификатору данных опции в поле выбора. Я делал это раньше с помощью более легкого форматированного массива, но поскольку у продукта может быть несколько вариантов, мне пришлось изменить формат массива.

Пример HTML

<label>Choose your Color</label> 
<select data-id="pa_choose-your-color"> 
<option data-id="818">Red</option> 
<option data-id="819">Blue</option> 
</select> 

Должен ли я изменить формат массива PHP или есть способ петлевой корыта такого рода объектов в JavaScript?

ответ

1

Попробуйте для цикла построения параметров:

var obj = {"attribute_label":"Choose your Color","attribute_name":"pa_choose-your-color","variations":{"819":"Red","820":"Blue","821":"Green"}}; 

for (variation in obj.variations) { 
    console.log("Data ID: " + variation); 
    console.log("Color: " + obj.variations[variation]); 
} 
+0

Благодаря это работает отлично подходит для вариаций, но есть способ одного цикла attribute_label и attribute_name и после этого цикла вариации? – Swolschblauw

+0

Я не понимаю ваш вопрос. С 'attribute_label' и' attribute_name' являются одиночными полями, а не массивами, что там делать? Или вы хотите зацикливать массив 'product_variations' и базовые' product_variations.variations' в одном цикле? –

+0

Вы правы, так как сейчас существует не так много циклов с атрибутом_label и attribute_name, потому что есть только один атрибут. На данный момент я просто использую его как отдельные поля, позже я исправлю свой PHP так, чтобы его продукт мог иметь больше атрибутов. Спасибо за вашу помощь! – Swolschblauw