[英]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;
下一次您提出問題時,這里有一些建議:
避免發布與您的問題無關的代碼。 這會使您的問題更難以理解,而對於其他有類似問題的人來說,該問題也就沒有用了。
確保縮進格式正確。 當您鍵入問題時,將在onChange();-)上進行預覽。
將標簽添加到與您遇到的問題相關的問題。 這樣,對於本站點中能夠為您提供幫助的人員,將更容易找到您的問題。 例如,在這種情況下,至少應添加PHP標記。
您對問題的解釋越好,就越容易理解它,對您的幫助也就越容易,這個問題對其他用戶越有用。 為您的問題做一個簡化的例子是一個很好的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.