如何组合foreach的数组结果

时间:2017-07-28 11:14:21

标签: php wordpress woocommerce

我正在尝试显示所有愿望清单,woocommerce插件的产品。此外,我想使wishlist可以排序,所以我将它连接到数据库,如果没有给定唯一ID的行,它将按类别无组织显示所有产品。

如果有唯一ID,则应显示其中的所有项目。现在它显示$ row如下:

Array ( 
    [0] => 237 
    [1] => 243 
    [2] => 266 
) 
Array ( 
    [0] => 237 
    [1] => 243 
    [2] => 266 
) 
Array ( 
    [0] => 237 
    [1] => 243 
    [2] => 266 
)

由于3个产品属于同一类别,因此会同时显示3个产品。

        <?php
        // db conn
        $mysqli = new mysqli(
            "localhost",
            "root",
            "root",
            "nest"
        );
        // new wishist
        $wishlist = new WC_Wishlists_Wishlist( $_GET['wlid'] );
        // get products from wishlist
        $wishlist_items = WC_Wishlists_Wishlist_Item_Collection::get_items( $wishlist->id, true );
        // counter - useless at the moment
        $counter = 0;
        // loop through all products
        foreach ( $wishlist_items as $wishlist_item_key => $item ) {
            $counter++;
            // get product id
            $product_id = apply_filters( 'woocommerce_cart_item_product_id', $item['product_id'], $item, $wishlist_item_key );
            // get categories
            $cats = get_the_terms($product_id, 'product_cat');

            // loop categories
            foreach ($cats as $cat) {
                // get slug
                $product_cat = $cat->slug;
            }
            // wishlist id is set in the database as a primary key - unique.
            $wlid_cats = $product_cat . $wishlist->id;

            // query with results
            $result = $mysqli->query("
                SELECT list 
                FROM sortable 
                WHERE wlid_cats = '$wlid_cats' "
            );

            // results parsed into $row
            $row = $result->fetch_array(MYSQLI_NUM);

            if (isset($row)) {
                // change string to array
                $row = implode(' ', $row);
                // split array item[0] into diff items.
                $row = preg_split("/[\s,]+/", $row);
            }
            // get product data
            $_product   = wc_get_product( $item['data'] );
            if ( $_product->exists() && $item['quantity'] > 0 ) {
                $product_permalink = apply_filters( 'woocommerce_cart_item_permalink', $_product->is_visible() ? $_product->get_permalink( $item ) : '', $item, $wishlist_item_key );
                // $cate is a function parameter which asks for the category to be displayed
                if  ($product_cat == $cate && empty($row)) {
                ?>
                        <!--Saved for Jquery reasons - POST to db-->
                        <p style="display: none" id="<?= $wishlist->id ?>"  class="<?= $wishlist->id ?> "><?= $cate ?></p>
                        <li class="product-thumbnail" type="<?= $cate ?>" id="product-<?= $product_id ?>">
                            <?php
                            // gets thumbnail and displays it 
                            $thumbnail = apply_filters('woocommerce_cart_item_thumbnail', $_product->get_image(), $item, $wishlist_item_key);
                            echo $wlid_cats;
                            if (!$product_permalink) {
                                echo $thumbnail;
                            } else {
                                printf('<a href="%s">%s</a>', esc_url($product_permalink), $thumbnail);
                            }
                            ?>
                        </li>
                        <?php
                } elseif (!empty($row)) {

                    // where I'm stuck
                    print_r($row);

                }

            }
        } ?>

如何将输出合并为仅获取一个数组而不是3?

2 个答案:

答案 0 :(得分:0)

制作新的全球数组

$narray = array();

然后在你的情况

elseif (!empty($row)) {
          // where I'm stuck
     $narray[] = $row; // add the array
}
$result = array_map("unserialize", array_unique(array_map("serialize", $narray)));
print_r($result);

答案 1 :(得分:0)

我试图在这里解决问题。 不应该查询

$result = $mysqli->query("
                SELECT list 
                FROM sortable 
                WHERE wlid_cats = '$wlid_cats' "
                );

让类别列表不仅仅是一个类别,如果有重复类别,它会对其进行排序。

重新阅读你的问题并尝试解决这个问题。

因此,在第12行,您已经拥有了这些项目的ID,现在您需要通过“可排序”对其进行排序。表

所以一个查询(如果这只是普通的sql)会是这样的。

//订单的itemIds

$order = "itemId=3 DESC,itemId=1 DESC,itemId=5 DESC,itemId=6 DESC,category DESC";

  $query =  "SELECT * FROM items WHERE itemID IN (myItems) ORDER BY ".$order;

也许我在这里错过了这一点,但是sql是健全的。