我正在尝试使用供应商作为主要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();?>
任何人都可以指出我需要去的方向吗?感谢。
答案 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;
下次你提出问题时,这里有一些建议:
避免发布与您的问题无关的代码。它使您更难理解您的问题,而这个问题对于遇到类似问题的其他人则不那么有用。
确保缩进格式正确。输入问题时,会在onChange(); - )
在问题中添加与您遇到的问题相关的标签。这样,您可以更轻松地为本网站中的人员找到能够帮助您的问题。在这种情况下,例如,至少应该添加PHP标记。
您解决问题越好,理解越容易,帮助您越容易,问题对其他用户越有用。制作一个简化的问题示例是一个很好的方法。