Php,使用数组中的计数
Php, using a count in an array
我正在尝试使用 Xero 会计软件的 API (php) 创建发票。如果我使用以下代码(摘录),我可以创建发票并添加产品而不会出现任何问题:
$lineitem1 = new XeroAPI\XeroPHP\Models\Accounting\LineItem;
$lineitem1
->setItemCode(MODEL-REF1)
->setQuantity(10)
->setTaxType(NONE);
$arr_lineitem = [];
array_push($arr_lineitem, $lineitem1);
$lineitem2 = new XeroAPI\XeroPHP\Models\Accounting\LineItem;
$lineitem2
->setItemCode(MODEL-REF2)
->setQuantity(20)
->setTaxType(NONE);
$arr_lineitem = [];
array_push($arr_lineitem, $lineitem2);
这没有任何问题,并且会在发票上创建两个产品(MODEL-REF1 和 MODEL-REF2)及其相关数量和税种。
当我尝试从上一页的表格中填充这些详细信息时,问题就开始了(因为每张发票上可能有 1 种或 100 多种不同的产品)。该表格将传递具有唯一 ID 的产品型号项目代码等(在下面的示例中以“X”显示自动递增 1),还将传递购买的产品线总数。
例如上面的表格是:
<input type="text" id="ItemCode**X**" name="ItemCode**X**" value="MODEL-REF1">
<input type="text" id="Quantity**X**" name="Quantity**X**" value="10">
<input type="text" id="TaxType**X**" name="TaxType**X**" value="NONE">
<input type="text" id="ItemCode**X**" name="ItemCode**X**" value="MODEL-REF2">
<input type="text" id="Quantity**X**" name="Quantity**X**" value="20">
<input type="text" id="TaxType**X**" name="TaxType**X**" value="NONE">
<input type="text" id="TotalProductsInLoop" name="TotalProductsInLoop" value="2">
因此,我想我可以使用以下方法在脚本 API 端循环遍历值(然后将产品提交给 xero):
for ($i=1; $i<=$TotalProductsInLoop; $i++) {
$ItemCode = $_POST['ItemCode'.$i];
$Quantity = $_POST['Quantity'.$i];
$TaxType = $_POST['TaxType'.$i];
$lineitem . $i = new XeroAPI\XeroPHP\Models\Accounting\LineItem;
$lineitem . $i
->setItemCode($ItemCode)
->setQuantity($Quantity)
->setTaxType($TaxType);
$arr_lineitem = [];
array_push($arr_lineitem, $lineitem . $i);
}
但是,这只会提交循环中的最后一个产品,例如MODEL-REF2而不是别人给发票的第一个产品。
有人能看出我在这里遗漏了什么吗?
我假设这与在数组中使用计数循环有关??
- 我非常怀疑以下行是否在没有任何警告或错误的情况下执行:
$lineitem . $i = new XeroAPI\XeroPHP\Models\Accounting\LineItem;
$lineitem . $i
->setItemCode($ItemCode)
->setQuantity($Quantity)
->setTaxType($TaxType);
这个 ($lineitem . $i
) 是标准的字符串连接,不能像这样创建编号变量。
事实上,你不需要编号的变量,你可以在循环中重复使用单个变量。
- 您正在每个循环步骤中重置结果容器数组 (
$arr_lineitem
)。所以它总是只包含最新的值。
正确的代码应该更像这样:
$arr_lineitem = [];
for ($i=1; $i<=$TotalProductsInLoop; $i++) {
$ItemCode = $_POST['ItemCode'.$i];
$Quantity = $_POST['Quantity'.$i];
$TaxType = $_POST['TaxType'.$i];
$lineitem = new XeroAPI\XeroPHP\Models\Accounting\LineItem;
$lineitem
->setItemCode($ItemCode)
->setQuantity($Quantity)
->setTaxType($TaxType);
array_push($arr_lineitem, $lineitem);
}
我正在尝试使用 Xero 会计软件的 API (php) 创建发票。如果我使用以下代码(摘录),我可以创建发票并添加产品而不会出现任何问题:
$lineitem1 = new XeroAPI\XeroPHP\Models\Accounting\LineItem;
$lineitem1
->setItemCode(MODEL-REF1)
->setQuantity(10)
->setTaxType(NONE);
$arr_lineitem = [];
array_push($arr_lineitem, $lineitem1);
$lineitem2 = new XeroAPI\XeroPHP\Models\Accounting\LineItem;
$lineitem2
->setItemCode(MODEL-REF2)
->setQuantity(20)
->setTaxType(NONE);
$arr_lineitem = [];
array_push($arr_lineitem, $lineitem2);
这没有任何问题,并且会在发票上创建两个产品(MODEL-REF1 和 MODEL-REF2)及其相关数量和税种。
当我尝试从上一页的表格中填充这些详细信息时,问题就开始了(因为每张发票上可能有 1 种或 100 多种不同的产品)。该表格将传递具有唯一 ID 的产品型号项目代码等(在下面的示例中以“X”显示自动递增 1),还将传递购买的产品线总数。
例如上面的表格是:
<input type="text" id="ItemCode**X**" name="ItemCode**X**" value="MODEL-REF1">
<input type="text" id="Quantity**X**" name="Quantity**X**" value="10">
<input type="text" id="TaxType**X**" name="TaxType**X**" value="NONE">
<input type="text" id="ItemCode**X**" name="ItemCode**X**" value="MODEL-REF2">
<input type="text" id="Quantity**X**" name="Quantity**X**" value="20">
<input type="text" id="TaxType**X**" name="TaxType**X**" value="NONE">
<input type="text" id="TotalProductsInLoop" name="TotalProductsInLoop" value="2">
因此,我想我可以使用以下方法在脚本 API 端循环遍历值(然后将产品提交给 xero):
for ($i=1; $i<=$TotalProductsInLoop; $i++) {
$ItemCode = $_POST['ItemCode'.$i];
$Quantity = $_POST['Quantity'.$i];
$TaxType = $_POST['TaxType'.$i];
$lineitem . $i = new XeroAPI\XeroPHP\Models\Accounting\LineItem;
$lineitem . $i
->setItemCode($ItemCode)
->setQuantity($Quantity)
->setTaxType($TaxType);
$arr_lineitem = [];
array_push($arr_lineitem, $lineitem . $i);
}
但是,这只会提交循环中的最后一个产品,例如MODEL-REF2而不是别人给发票的第一个产品。
有人能看出我在这里遗漏了什么吗?
我假设这与在数组中使用计数循环有关??
- 我非常怀疑以下行是否在没有任何警告或错误的情况下执行:
$lineitem . $i = new XeroAPI\XeroPHP\Models\Accounting\LineItem;
$lineitem . $i
->setItemCode($ItemCode)
->setQuantity($Quantity)
->setTaxType($TaxType);
这个 ($lineitem . $i
) 是标准的字符串连接,不能像这样创建编号变量。
事实上,你不需要编号的变量,你可以在循环中重复使用单个变量。
- 您正在每个循环步骤中重置结果容器数组 (
$arr_lineitem
)。所以它总是只包含最新的值。
正确的代码应该更像这样:
$arr_lineitem = [];
for ($i=1; $i<=$TotalProductsInLoop; $i++) {
$ItemCode = $_POST['ItemCode'.$i];
$Quantity = $_POST['Quantity'.$i];
$TaxType = $_POST['TaxType'.$i];
$lineitem = new XeroAPI\XeroPHP\Models\Accounting\LineItem;
$lineitem
->setItemCode($ItemCode)
->setQuantity($Quantity)
->setTaxType($TaxType);
array_push($arr_lineitem, $lineitem);
}