【问题标题】:Trying to get info out of an object within and object PHP试图从 PHP 中的对象和对象中获取信息
【发布时间】:2012-06-01 09:50:35
【问题描述】:

好的,我对 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;

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

【问题讨论】:

  • json格式很难看,可以json_decode转储php数组吗?
  • -1 emilvikstrom.se/whyidownvote.html(你的问题是什么?目标是什么?)
  • 您实际上无法从 var_dump 中看到子数组中的信息。但我会补充原来的问题。我很想知道为什么问题被否决了。是不是太模糊了,还是太初学者了?
  • 结果是从“register_sales_products”中销售的产品中列出 SKU。或任何这些值。即“价格”,“注册ID”
  • 嗨@EmilVikström。我读了你的理由页。我认为这是公平的。我确实等到我尝试了至少一个小时后才发帖。我很新。现在在 Lynda.com 上学习 2 周。所以 stackoverflow 是非常有价值的资源,我很感激我能从这里得到的任何帮助。我会努力确保我的帖子在未来更清晰。谢谢

标签: php


【解决方案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;

【讨论】:

    【解决方案2】:

    如果我正确理解您的格式,这应该会创建一个 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-&gt;register_sale_products 合并到数组中(例如 @ 987654324@).

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多