簡體   English   中英

用PHP數組創建一個新的多維數組

[英]Create a new multidimensional array out of a PHP array

我正在嘗試創建一個以供應商為主要ID的新陣列。

每個供應商都可以提供多種產品。 我想將所有產品分配到一個新陣列中。

此代碼生成具有以下信息的產品列表。

Supplier id Supplier name   Product id  Product name    Quantity

187         Supplier A      37      Happy Ninja         1   
195         Supplier C      70      Flying Ninja        1   
187         Supplier A      53      Happy Ninja         1   
187         Supplier A      31      Ninja Silhouette    1   
193         Supplier B      56      Ninja Silhouette    1   
193         Supplier B      50      Patient Ninja       1   
187         Supplier A      19      Premium Quality     1

我需要的是這樣的數組

Array
(
[187] => Array
                    [0]
                        (
                            [product_id] => 37
                                [product_name] => Happy Ninja
                                [quantity] => 1
                            )
                        [1]
                            (
                                [product_id] => 53
                                [product_name] => Flying Ninja
                                [quantity] => 1
                            )
                        [2]
                            (
                                [product_id] => 31
                                [product_name] =>   Ninja Silhouette
                                [quantity] => 1
                            )
                        [3]
                            (
                                [product_id] => 19
                                [product_name] => Premium Quality
                                [quantity] => 1
                            )                           

    [195] => Array
        (
            [product_id] => 70
            [product_name] => Flying Ninja
            [quantity] => 1
        )

    [193] => Array
                        [0]
                        (
                            [product_id] => 56
                            [product_name] => Ninja Silhouette
                            [quantity] => 1
                        )
                        [1]
                        (
                            [product_id] => 50
                            [product_name] => Patient Ninja
                            [quantity] => 1
                        )
)

global $woocommerce;

$order_id = 123;

$suppliers = array();

/**
*   Get the order
*/
$order = new WC_order($order_id);
$items = $order->get_items();

?>
<table >
    <thead>
        <th>
            <td>Supplier id</td>
            <td>Supplier name</td>
            <td>Product id</td>
            <td>Product name</td>
            <td>Quantity</td>               
        </th>
    </thead>
    <tbody>
    <?php       
        foreach($items as $item):

            $supplier_id = get_post_meta($item['item_meta']['_product_id'][0], 'jm_ots-product-supplier', true);        

            $product_id = $item['item_meta']['_product_id'][0];
            $product_name = $item['name'];
            $quantity = $item['item_meta']['_qty'][0];

            $suppliers[$supplier_id] = array('product_id' => $product_id, 'product_name' => $product_name, 'quantity' => $quantity);

            echo '<tr>';
            echo '<td >' . $supplier_id . '<td>';
            echo '<td>';
                if(!empty($supplier_id)): echo get_the_title($supplier_id); endif;
            echo '</td>';
            echo '<td>' . $product_id . '<td>';
            echo '<td>' . $product_name . '<td>';
            echo '<td>' . $quantity . '<td>';
            echo '</tr>';
        endforeach;
        ?>
    </tbody>
</table>
<br />
<br />

<?php get_footer();?>

誰能指出我需要去的方向? 謝謝。

請嘗試以下操作:

1-像這樣填充$供應商:

//This
$suppliers[] = array(
               'supplier_id' => $supplier_id,
               'product_id' => $product_id,
               'product_name' => $product_name,
               'quantity' => $quantity
);
//Instead of:
$suppliers[$supplier_id] = array(
                           'product_id' => $product_id,
                           'product_name' => $product_name,
                           'quantity' => $quantity
);

2-填充$供應商后,按供應商ID對其進行排序:

//Get array with $supplier_id values
foreach ($suppliers as $key => $row) {
    $colSuppId[$key] = $row['supplier_id'];
}

//Sort $suppliers by $supplier_id
array_multisort($colSuppId, SORT_ASC, $suppliers);

3-從這里創建數組

$newArray = array();
$bufArray = array();
$bufVal = null;

foreach ($suppliers as $row) {
    $supp = $row['supplier_id'];
    if (!empty($bufArray) and $bufVal != $supp) {
        $newArray[$bufVal] = $bufArray;
        $bufArray = array();
    }
    $bufArray[] = array(
                  'product_id' => $row['product_id'],
                  'product_name' => $row['product_name'],
                  'quantity' => $row['quantity']
    );
    $bufVal = $supp;
}
if (!empty($bufArray)) {
    $newArray[$bufVal] = $bufArray;
}

$suppliers = $newArray;

下一次您提出問題時,這里有一些建議:

  1. 避免發布與您的問題無關的代碼。 這會使您的問題更難以理解,而對於其他有類似問題的人來說,該問題也就沒有用了。

  2. 確保縮進格式正確。 當您鍵入問題時,將在onChange();-)上進行預覽。

  3. 將標簽添加到與您遇到的問題相關的問題。 這樣,對於本站點中能夠為您提供幫助的人員,將更容易找到您的問題。 例如,在這種情況下,至少應添加PHP標記。

  4. 您對問題的解釋越好,就越容易理解它,對您的幫助也就越容易,這個問題對其他用戶越有用。 為您的問題做一個簡化的例子是一個很好的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM