Php 将数组内容插入到对象中不起作用
我正在创建一个接受product line参数的invoice对象。因为一个订单可以有很多产品,所以我使用一个迭代器来收集行项目数组$prod_line是保存产品线阵列集合的数组 我希望能够将$prod_行的内容注入到我的对象中,但我只有在使用$prod_行[0]或$prod_行[1]时才能成功 我已经尝试了一些技术来删除父层数组,比如array\u merge\u recursive,但是我在这个愚蠢的问题上坚持了几个小时,运气不佳,真的需要改进 非常感谢您的帮助 注意:下面的代码是为了可读性而精简的——忽略缺少的变量实例化并用于概念 Quickbooks\u Invoice.php $prod\U行的var转储Php 将数组内容插入到对象中不起作用,php,arrays,object,Php,Arrays,Object,我正在创建一个接受product line参数的invoice对象。因为一个订单可以有很多产品,所以我使用一个迭代器来收集行项目数组$prod_line是保存产品线阵列集合的数组 我希望能够将$prod_行的内容注入到我的对象中,但我只有在使用$prod_行[0]或$prod_行[1]时才能成功 我已经尝试了一些技术来删除父层数组,比如array\u merge\u recursive,但是我在这个愚蠢的问题上坚持了几个小时,运气不佳,真的需要改进 非常感谢您的帮助 注意:下面的代码是为了可读性
填充
$prod\u line
项目后,再执行一个$prod\u line[]
以添加金额
,数组。这不是因为它是一个数组,而是因为它的结构不正确
您的主要工作是:
<?php
$prod_line = [
['key' => 'value'],
['key' => 'value']
];
$final = [
$prod_line,
[
'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
}
填充
$prod\u line
项目后,再执行一个$prod\u line[]
以添加金额
,数组。这不是因为它是一个数组,而是因为它的结构不正确
您的主要工作是:
<?php
$prod_line = [
['key' => 'value'],
['key' => 'value']
];
$final = [
$prod_line,
[
'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
}
我根本不明白为什么要创建
$prod\u行
数组。如果您确实需要它,但您没有显示它,那么只需将所有“行”内容分配给一个数组,将其推到$prod\u line
上,然后还将其分配给发票数组中的“行”索引。我还注意到,在每个循环之后,您没有清除$prod\u行。这意味着每张发票将包含上一张发票的产品。这是一个简化的示例,因此很容易看到问题。因此,不要担心清除变量之类的问题——这个文件实际上非常大,并且比显示的代码要多。此变量收集项目迭代(在product foreach中)——然后只填充行对象的一部分——金额、详细类型等不应经过迭代。如果您有更好的建议,请提供伪代码——谢谢。我根本不明白为什么要创建$prod\u行
数组。如果您确实需要它,但您没有显示它,那么只需将所有“行”内容分配给一个数组,将其推到$prod\u line
上,然后还将其分配给发票数组中的“行”索引。我还注意到,在每个循环之后,您没有清除$prod\u行。这意味着每张发票将包含上一张发票的产品。这是一个简化的示例,因此很容易看到问题。因此,不要担心清除变量之类的问题——这个文件实际上非常大,并且比显示的代码要多。此变量用于收集项目迭代次数(在product foreach中)——然后仅填充行对象的一部分——amount、detailtype、,ect不应该经过迭代。如果您有更好的建议,请提供伪代码-thanksI曾尝试过类似的方法,但最终放弃了它,只是因为在添加额外数量、细节类型等时有些尴尬。但这一方向看起来确实是一个更好的选择。我会试试这个-谢谢!!我认为问题很简单,因为您有一个数组,然后您试图将该数组与最终结构数组进行放置/合并,但这不起作用,您以前需要将其合并或填充。这起作用:):)--我想我一直在用另一种方法进行操作(这是一个混乱)。非常感谢你!没问题,很乐意帮忙。我也尝试过类似的方法,但最终还是放弃了,因为在添加额外的数量、细节类型等时有些尴尬。但这一方向看起来确实是一个更好的选择。我会试试这个-谢谢!!我认为问题很简单,因为您有一个数组,然后您试图将该数组与最终结构数组进行放置/合并,但这不起作用,您以前需要将其合并或填充。这起作用:):)--我想我一直在用另一种方法进行操作(这是一个混乱)。非常感谢你!没问题,很乐意帮忙。
<?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
}
$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);