从数组中获取每个键和值,然后在新行中显示全部

时间:2020-10-28 作者:Walter P.

我试图展示WooCommerce的每一个关键点和价值get_formatted_meta_data 订购元详细信息。这是我生成数组的代码:

$order = new WC_Order( $order_id );
    foreach ( $order->get_items() as $item_id => $item ) {
        $item_data = $item->get_data();
        $item_meta_data = $item->get_meta_data();
        $formatted_meta_data = $item->get_formatted_meta_data( \' \', true );
        $array = json_decode(json_encode($formatted_meta_data), true);
        $arrayx = array_values($array);
            foreach($arrayx as $value) {
                $result[]=array($value["display_key"], wp_strip_all_tags($value["display_value"]));
                foreach ($result as $key => $value) {
                    $var_label = $key;
                    $var_value = $value;
                    }
                }
    }
这是我使用上述函数打印的数组:

Array
(
    [0] => Array
        (
            [0] => Color
            [1] => Black
        )

    [1] => Array
        (
            [0] => Size
            [1] => M
        )

    [2] => Array
        (
            [0] => Gift
            [1] => Tes 2
        )

)
现在,我想获取数组中的每个值,并想如下所示显示它们(显示在新行中):

Color: Black
Size: M
Gift: Tes 2
etc
etc
etc (dynamically inserted by WooCommerce if any or added by other plugins)
这是我已经尝试过的:

$order = new WC_Order( $order_id );
foreach ( $order->get_items() as $item_id => $item ) {
    $product_id   = $item->get_product_id();
    $quantity     = $item->get_quantity();
    $product_name = $item->get_name();
    $item_data = $item->get_data();
    $item_meta_data = $item->get_meta_data();
    $formatted_meta_data = $item->get_formatted_meta_data( \' \', true );
    $array = json_decode(json_encode($formatted_meta_data), true);

    $arrayx = array_values($array);
    $count=0;
    foreach($arrayx as $value) {
        $result[]=array($value["display_key"], wp_strip_all_tags($value["display_value"]));
        foreach ($result as $key => $value) {
            $var_label = $key;
            $var_value = $value;
            $metadata[\'count\'] = "\\r\\n".$var_label[0].": ".$var_value[0]."";
            $count++;
        }
    }
           
    $formatted_product_name = wp_strip_all_tags(" *".$product_name."*");
    $product_plus_meta = "*".$formatted_product_name."* ".$metadata[\'count\']."";
    $quantity = $item->get_quantity();
    $output_content.= urlencode("".$quantity."x - ".$product_plus_meta."\\r\\n");
   }
}
$output_content.="".$price."";
使用上面的代码,我只能从数组中提取一个值和键(只有数组中最新的一个),这是Gift => Tes 2.输出如下:

1x - **Sample Product** 
Gift: Tes 2

Price: $12.00
而不是这样:

1x - **Sample Product**
Color: Black
Size: M
Gift: Tes 2

Price: $12.00
如何获得每个已存在数组键和值的完整列表,并像上面的示例那样在新行中显示所有这些键和值?

提前非常感谢您。任何帮助都将不胜感激。

2 个回复
SO网友:Djilan MOUHOUS

如果你可以打印你的数组,为什么你不能?你只需在这个数组上做一个循环,然后将每一行添加到你的output\\u内容中。看起来像这样

<?php
$myArray = Array
(
    0 => Array
        (
            0 => "Color",
            1 => "Black",
        ),

    1 => Array
        (
            0 => "Size",
            1 => "M",
        ),

    2 => Array
        (
            0 => "Gift",
            1 => "Tes 2"
        ),

);
$output_content = "";
foreach($myArray as $key){
    $output_content .= $key[0]." : ".$key[1]."\\r";
}
echo $output_content;

?>
该代码打印:

Color : Black
Size : M
Gift : Tes 2

SO网友:Walter P.

通过使用@Djilan\'在回答这个问题时,我成功地获取了相应的数据,并调整了数据的显示方式,从而避免了在下一项中出现复合数组。

我错过了这部分(回答是@Djilan), 这确实是正确的方式:

$product_meta = "";
foreach($myArray as $key){
    $product_meta .= $key[0]." : ".$key[1]."\\r";
}
echo $product_meta ;
只需调整代码,这是最终代码:

...
...
$order = new WC_Order( $order_id );
foreach ( $order->get_items() as $item_id => $item ) {
    $product_id   = $item->get_product_id(); //Get the product ID
    $quantity     = $item->get_quantity(); //Get the product QTY
    $product_name = $item->get_name(); //Get the product NAME
    $quantity = $item->get_quantity();
    $output_content .= urlencode("".$quantity."x - *".$product_name."*\\r\\n");
        // get order item data
        $item_data = $item->get_data();

        // get order item meta data
        $item_meta_data = $item->get_meta_data();

        // get only All item meta data
        $formatted_meta_data = $item->get_formatted_meta_data( \'_\', true );
        $array = json_decode(json_encode($formatted_meta_data), true);
        $arrayx = array_values($array);
        $arrayxxx = array_merge($array);
        $result = array();
    foreach( (array) $arrayxxx as $value) {
        $product_meta = "";
        $result[]=array($value["display_key"], wp_strip_all_tags($value["display_value"]));
        foreach ($result as $key) {
            $result = array();
            $product_meta .= "     - ".$key[0].": ".$key[1]."\\r\\n";
            $output_content.= urlencode("".$product_meta."");
       }
    }
}
$output_content.="".$format_subtotal_price."";
echo $output_content;
最终输出如下:

1x - Sample Product #1 - Black, M
     - Color: Black
     - Size: M
1x - Sample Product #2
     - Color: Blue
     - Size: XL
     - Gift: Tes 3
$1,173.00