我正在创建一个带有产品系列参数的发票对象。因为订单可以有很多产品,所以我使用的是一个收集一系列订单项的迭代器。 $ prod_line是一个包含产品系列数组的数组。
我希望能够将$ prod_line的内容注入到我的对象中,但是在使用$ prod_line [0]或$ prod_line [1]时我才会成功。
我已经尝试了一些技术来删除父层数组,例如array_merge_recursive - 但是我一直坚持这个愚蠢的问题几个小时没有运气,真的需要进步。
非常感谢帮助!!
注意:为了便于阅读,下面的代码被删除 - 忽略丢失的变量实例化并用于概念。
function create_qb_invoice()
{
foreach ($az as $order_id => $order) // FOR EACH ORDER
{
$line_id = 1;
foreach ($order['products'] as $product) // FOR EACH PRODUCTS
{
// A 'LINE' STANDS FOR AN ITEMIZED PRODUCT LINE IN QUICKBOOKS INVOICE FORMS
// FOR EACH PRODUCT, CREATE A LINE FOR QUICKBOOKS INVOICE
$prod_line[] =
[
"Id" => $line_id,
"LineNum" => $line_id,
"Amount" => $product['ItemPrice']['Amount'],
"DetailType" => "SalesItemLineDetail",
"SalesItemLineDetail" => [
"ItemRef" => [
"value" => $theItemId,
"name" => $theItemName
],
"TaxCodeRef" => [
"value" => "NON"
],
"UnitPrice" => $product['ItemPrice']['Amount'],
"Qty" => $product['QuantityOrdered'],
]
];
$line_id ++;
}
$myInvoiceObj = Invoice::create([
"LinkedTxn" => [],
"Line" =>
[
// THIS SHOULD BE REPLACED WITH THE $prod_line VARIABLE
// HOWEVER I'VE ONLY BEEN ABLE TO USE $prod_line[0], OR $prod_line[1]
// REGULAR $prod_line HAS AN EXTRA LAYER OF ARRAY THAT Invoice::create WON'T BE EXPECTING
// STRIPPING AWAY THE CONTAINING ARRAY IS NOT WORKING WHEN i USE array_merge_recursive or similar solutions
// [
// "Id" => "1",
// "LineNum" => 1,
// "Amount" => $order['ItemPrice']['Amount'],
// "DetailType" => "SalesItemLineDetail",
// "SalesItemLineDetail" =>
// [
// "ItemRef" =>
// [
// "value" => $theItemId,
// "name" => $theItemName
// ],
// "TaxCodeRef" =>
// [
// "value" => "NON"
// ]
// ]
// ],
[
"Amount" => $order['OrderTotal']['Amount'],
"DetailType" => "SubTotalLineDetail",
"SubTotalLineDetail" => []
]
],
"CustomerRef" =>
[
"value" => "18269",
"name" => "Amazon"
]
]);
$resultingInvoiceObj = $dataService->Add($myInvoiceObj);
}//for
}
array(2) { // this array layer should be stripped out
[0]=>
array(5) { // and this array-- just want to pass the inner contents
["Id"]=>
int(1)
["LineNum"]=>
int(1)
["Amount"]=>
string(6) "366.97"
["DetailType"]=>
string(19) "SalesItemLineDetail"
["SalesItemLineDetail"]=>
array(4) {
["ItemRef"]=>
array(2) {
["value"]=>
string(4) "9378"
["name"]=>
string(20) "Countryman E6OW5C2SR"
}
["TaxCodeRef"]=>
array(1) {
["value"]=>
string(3) "NON"
}
["UnitPrice"]=>
strin
g(6) "366.97"
["Qty"]=>
string(1) "1"
}
}
[1]=>
array(5) {
["Id"]=>
int(2)
["LineNum"]=>
int(2)
["Amount"]=>
string(6) "365.81"
["DetailType"]=>
string(19) "SalesItemLineDetail"
["SalesItemLineDetail"]=>
array(4) {
["ItemRef"]=>
array(2) {
["value"]=>
string(4) "9392"
["name"]=>
string(20) "Countryman E6OW5T2SR"
}
["TaxCodeRef"]=>
array(1) {
["value"]=>
string(3) "NON"
}
["UnitPrice"]=>
string(6) "365.81"
["Qty"]=>
string(1) "1"
}
}
}
答案 0 :(得分:0)
填充$prod_line
项后,请再添加$prod_line[]
以添加Amount
数组。它不是因为它的一个数组它剥离它是因为它不是正确的结构。
你基本上在做:
<?php
$prod_line = [
['key' => 'value'],
['key' => 'value']
];
$final = [
$prod_line,
[
'key' => 'value'
]
];
将产生:
Array
(
[0] => Array
(
[0] => Array
(
[key] => value
)
[1] => Array
(
[key] => value
)
)
[1] => Array
(
[key] => value
)
)
这不是正确的结构。
相反,你应该在进行时构建最终的数组。
<?php
function create_qb_invoice()
{
foreach ($az as $order_id => $order) // FOR EACH ORDER
{
$prod_line = [];
$line_id = 1;
foreach ($order['products'] as $product) // FOR EACH PRODUCTS
{
$prod_line[] =
[
"Id" => $line_id,
"LineNum" => $line_id,
"Amount" => $product['ItemPrice']['Amount'],
"DetailType" => "SalesItemLineDetail",
"SalesItemLineDetail" => [
"ItemRef" => [
"value" => $theItemId,
"name" => $theItemName
],
"TaxCodeRef" => [
"value" => "NON"
],
"UnitPrice" => $product['ItemPrice']['Amount'],
"Qty" => $product['QuantityOrdered'],
]
];
$line_id++;
}
$prod_line[] = [
"Amount" => $order['OrderTotal']['Amount'],
"DetailType" => "SubTotalLineDetail",
"SubTotalLineDetail" => []
]
$myInvoiceObj = Invoice::create([
"LinkedTxn" => [],
"Line" => $prod_line,
"CustomerRef" =>
[
"value" => "18269",
"name" => "Amazon"
]
]);
$resultingInvoiceObj = $dataService->Add($myInvoiceObj);
}//for
}
可以找到此调用的正确数组结构here(中途向下):
$myInvoiceObj = Invoice::create([
"DocNumber" => "1070",
"LinkedTxn" => [],
"Line" => [[
"Id" => "1",
"LineNum" => 1,
"Amount" => 150.0,
"DetailType" => "SalesItemLineDetail",
"SalesItemLineDetail" => [
"ItemRef" => [
"value" => "1",
"name" => "Services"
],
"TaxCodeRef" => [
"value" => "NON"
]
]
], [
"Amount" => 150.0,
"DetailType" => "SubTotalLineDetail",
"SubTotalLineDetail" => []
]],
"CustomerRef" => [
"value" => "1",
"name" => "Amy's Bird Sanctuary"
]
]);
$resultingInvoiceObj = $dataService->Add($myInvoiceObj);