Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP数组中创建一个新的多维数组_Php_Arrays_Woocommerce - Fatal编程技术网

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

从PHP数组中创建一个新的多维数组,php,arrays,woocommerce,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

我正在尝试创建一个以供应商为主要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
global$woodcommerce;
$order_id=123;
$suppliers=array();
/**
*拿到订单
*/
$order=新WC\U订单($order\U id);
$items=$order->get_items();
?>
供应商id
供应商名称
产品id
产品名称
量


有人能指出我要去的方向吗?谢谢。

尝试以下方法:

1-填充$suppliers,如下所示:

//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-填充$suppliers后,按供应商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;
下次你提问时,这里有一些建议:

  • 避免发布与您的问题无关的代码。这会让你更难理解自己的问题,而这个问题对其他有类似问题的人也没什么用处

  • 确保缩进格式正确。键入问题时,将在更改()时进行预览;-)

  • 在问题中添加与问题相关的标记。这样,就可以更容易地为本网站中能够帮助您的人找到您的问题。例如,在本例中,至少应该添加PHP标记

  • 你解释得越好,问题就越容易理解,越容易帮助你,问题对其他用户就越有用。为你的问题做一个简单的例子是一个很好的方法

  • //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);
    
    $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;