从PHP for循环创建有效的JSON输出

时间:2016-01-11 09:55:51

标签: php json for-loop

从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输出现在有效,我无法弄清楚如何改进它。

2 个答案:

答案 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);