0

好的,我对 PHP 很陌生。我会尽力解释我的问题。

这是一个 json 对象的 var_dump。
我想做的是访问“register_sale_products”对象中的信息。
它包含每次销售中产品的 SKU、价格等产品信息。在下面的示例中,我试图列出 SKU。

object(stdClass)[1]
  public 'register_sales' => 
    array
      0 => 
        object(stdClass)[2]
          public 'id' => string '7c969b77-6825-bc65-3e04-64f922a570eb' (length=36)
          public 'register_id' => string '07709f8e-8d90-11e0-8e09-4040f540b50a' (length=36)
          public 'invoice_number' => string 'BH8464' (length=6)
          public 'register_sale_products' => 
            array
              ...
          public 'totals' => 
            object(stdClass)[6]
              ...
          public 'register_sale_payments' => 
            array
              ...
      1 => 
        object(stdClass)[9].......

我设法使用此代码从第一个“产品”对象数组“register_sale_products”中获取一个 SKU。

$array = array()    ;
foreach($data->register_sales as $sale){
    $array =    $sale->register_sale_products ;
    }
foreach($array as $saleprod){
        $details = explode(' / ', $saleprod->sku);
    $result = $details[0];
    }
echo $result;

我真的需要得到数组中每个对象的结果。
非常感谢任何帮助。

4

2 回答 2

1

$result每次循环时您都在覆盖:

foreach($array as $saleprod){
    $details = explode(' / ', $saleprod->sku);
    $result = $details[0];
}
echo $result;

您要做的是echo在循环内部,让我们$result成为一个新数组或让$result成为您附加到的字符串:

foreach($array as $saleprod){
    $details = explode(' / ', $saleprod->sku);
    echo $details[0], '<br>';
}

// or
$result = array();
foreach($array as $saleprod){
    $details = explode(' / ', $saleprod->sku);
    $result[] = $details[0];
}
foreach($result as $r) {
    echo $r;
}

//or
$result = '';
foreach($array as $saleprod){
    $details = explode(' / ', $saleprod->sku);
    $result .= $details[0] . ' ';
}
echo $result;
于 2012-06-01T16:11:50.897 回答
1

如果我正确理解您的格式,这应该创建一个 SKU 数组(注意:不是一组,任何重复的 SKU 将多次出现在数组中)。

$skus = array();
// Outer loop over sales
foreach($data->register_sales as $sale) {
  // Inner loop over a sale's products
  foreach($sale->register_sale_products as $product) {
    // Add the SKU to the array
    list($skus[]) = explode(' / ', $product->sku);
  }
}

// $skus now contains all the SKUs
print_r($skus);

仅就一些上下文而言,您的解决方案的主要问题(再次,基于我对您的结构的解释)是您$array为每次销售覆盖,而不是合并$sale->register_sale_products到数组中(例如$array = array_merge($array, $sale->register_sale_products);)。

但是,可以通过使用内部循环来进行进一步的改进,因为这可以有效地避免循环$data->register_sales两次。

第 7 行的使用list是可选的,但允许在没有额外变量的情况下进行赋值$details

于 2012-06-01T16:20:39.377 回答