Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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_Object - Fatal编程技术网

Php 将数组内容插入到对象中不起作用

Php 将数组内容插入到对象中不起作用,php,arrays,object,Php,Arrays,Object,我正在创建一个接受product line参数的invoice对象。因为一个订单可以有很多产品,所以我使用一个迭代器来收集行项目数组$prod_line是保存产品线阵列集合的数组 我希望能够将$prod_行的内容注入到我的对象中,但我只有在使用$prod_行[0]或$prod_行[1]时才能成功 我已经尝试了一些技术来删除父层数组,比如array\u merge\u recursive,但是我在这个愚蠢的问题上坚持了几个小时,运气不佳,真的需要改进 非常感谢您的帮助 注意:下面的代码是为了可读性

我正在创建一个接受product line参数的invoice对象。因为一个订单可以有很多产品,所以我使用一个迭代器来收集行项目数组$prod_line是保存产品线阵列集合的数组

我希望能够将$prod_行的内容注入到我的对象中,但我只有在使用$prod_行[0]或$prod_行[1]时才能成功

我已经尝试了一些技术来删除父层数组,比如array\u merge\u recursive,但是我在这个愚蠢的问题上坚持了几个小时,运气不佳,真的需要改进

非常感谢您的帮助

注意:下面的代码是为了可读性而精简的——忽略缺少的变量实例化并用于概念

Quickbooks\u Invoice.php $prod\U行的var转储
填充
$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);