从PHP数组中创建一个新的多维数组

时间:2014-08-09 22:43:18

标签: php arrays woocommerce

我正在尝试使用供应商作为主要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 个答案:

答案 0 :(得分:1)

尝试以下方法:

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. 上进行预览
  4. 在问题中添加与您遇到的问题相关的标签。这样,您可以更轻松地为本网站中的人员找到能够帮助您的问题。在这种情况下,例如,至少应该添加PHP标记。

  5. 您解决问题越好,理解越容易,帮助您越容易,问题对其他用户越有用。制作一个简化的问题示例是一个很好的方法。