试图从对象中获取信息并对象PHP

时间:2012-06-01 09:50:36

标签: php

好的,我是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].......

我设法使用此代码从第一个“Product”对象数组'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;

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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的情况下进行分配。