从php for循环获取有效的JSON输出时遇到一些麻烦,这是我的JSON:
[{"title":"One Colour ($2.45)","price":"($2.45)"},{"title":"Two Colours ($3.35)","price":"($3.35)"},{"title":"Three Colours ($4.25)","price":"($4.25)"}],[{"title":"One Colour ($2.45)","price":"($2.45)"},{"title":"Two Colours ($3.35)","price":"($3.35)"},{"title":"Three Colours ($4.25)","price":"($4.25)"},{"title":"One Colour ($3.05)","price":"($3.05)"},{"title":"Two Colours ($4.35)","price":"($4.35)"},{"title":"Three Colours ($5.75)","price":"($5.75)"}],
这是我的php循环,它创建了json输出
foreach ( $product_addons as $addon ) {
foreach ( $addon['options'] as $option ) :
$loop ++;
switch ($qty) {
case ($qty < 20):
$price = $option['price'] > 0 ? ' (' . wc_price( get_product_addon_price_for_display( $option['price'] ) ) . ')' : '';
$title = strip_tags($option['label']. $price);
break;
case ($qty > 20 && $qty < 35):
$price = $option['discount'] > 0 ? ' (' . wc_price( get_product_addon_price_for_display( $option['discount'] ) ) . ')' : '';
$title = strip_tags($option['label']. $price);
break;
}
$select_text[] = array(
'title' => trim($title),
'price' => trim(strip_tags($price)),
);
endforeach;
echo json_encode($select_text).",";
}
我现在遇到的问题是JSON输出现在有效,我无法弄清楚如何改进它。
答案 0 :(得分:1)
根据https://jsonformatter.curiousconcept.com/的问题是
多个JSON根元素
解决方案是将所有内容放入1中嵌入aray:
[
[
{
"title":"One Colour ($2.45)",
"price":"($2.45)"
},
{
"title":"Two Colours ($3.35)",
"price":"($3.35)"
},
{
"title":"Three Colours ($4.25)",
"price":"($4.25)"
}
],
[
{
"title":"One Colour ($2.45)",
"price":"($2.45)"
},
{
"title":"Two Colours ($3.35)",
"price":"($3.35)"
},
{
"title":"Three Colours ($4.25)",
"price":"($4.25)"
},
{
"title":"One Colour ($3.05)",
"price":"($3.05)"
},
{
"title":"Two Colours ($4.35)",
"price":"($4.35)"
},
{
"title":"Three Colours ($5.75)",
"price":"($5.75)"
}
]
]
和2:在线echo json_encode($select_text).",";
为什么要添加一个尾随逗号?
答案 1 :(得分:0)
通过查看这个帖子结束搞清楚: create multidimensional array using a foreach loop
基本上我需要做的就是在多维数组中使用第一个foreach循环的索引。这是我的最终代码:
foreach ( $product_addons as $key => $addon ) {
foreach ( $addon['options'] as $option ) :
$loop ++;
switch ($qty) {
case ($qty < 20):
$price = $option['price'] > 0 ? ' (' . wc_price( get_product_addon_price_for_display( $option['price'] ) ) . ')' : '';
$title = strip_tags($option['label']. $price);
break;
case ($qty > 20 && $qty < 35):
$price = $option['discount'] > 0 ? ' (' . wc_price( get_product_addon_price_for_display( $option['discount'] ) ) . ')' : '';
$title = strip_tags($option['label']. $price);
break;
}
$title = trim($title);
// Add in your custom fields or WP fields that you want
$locations[$key][] = array(
'title' => $title,
);
endforeach;
}
echo json_encode($locations);