【问题标题】:Accessing nested php object data访问嵌套的 php 对象数据
【发布时间】:2018-11-24 19:08:56
【问题描述】:

我正在尝试获取产品属性。 我可以像这样深入研究对象,但我被困在这里: 我如何获得 1500 的值?

谢谢

$bundle = new WC_Product_Bundle($post->ID);
$products = $bundle->get_bundled_items();
foreach ($products as $product) {
var_dump($product->{'product'}->{'attributes'});

array(1) {
  ["energy"]=>
  object(WC_Product_Attribute)#1402 (1) {
    ["data":protected]=>
    array(6) {
      ["id"]=>
      int(0)
      ["name"]=>
      string(6) "energy"
      ["options"]=>
      array(1) {
        [0]=>
        string(4) "1500"
      }
      ["position"]=>
      int(0)
      ["visible"]=>
      bool(true)
      ["variation"]=>
      bool(false)
    }
  }
}

【问题讨论】:

  • 请给我们看看WC_Product_Attribute类文件的代码。

标签: php oop


【解决方案1】:

您可以尝试通过以下方式获取“1500”数字:

$product->['product']->['attributes']['energy']['data']['options'][0]

【讨论】:

  • data 是受保护的财产。需要使用对象getter 方法来检索值,否则将引发Cannot access protected property 致命错误。见:3v4l.org/NAFUU
  • 谢谢这确实帮助我解决了它。我设法得到这样的数据:$product->{'product'}->{'attributes'}{'energy'}{'data'}{'options'}{0}
  • @fyrye 删除了我之前的评论,承认你是对的。其实你错了。 OP 正在访问同一类/函数中的对象,因此不强制执行受保护!在您的示例中,您创建了一个类,因为 OP 没有这样做。
  • 嘿@Tommys,如果你用正确类型的括号更新你的答案,我会接受你的答案。
  • @versionz 就上述代码而言,您正在尝试获取数组而不是属性的值。见stackoverflow.com/questions/38415367/…
【解决方案2】:

这是我最终用来创建 json 格式数组的完整代码。 如果其他人需要对可选捆绑产品的营养数据进行平均并显示在包装上的营养信息面板/标签等中,这可能会有所帮助...

可用于食谱、冰沙、麦片搅拌机等...

            $nutrition = [];
            $bundle = new WC_Product_Bundle($post->ID);
            $products = $bundle->get_bundled_items();
            foreach ($products as $product) {

                $att1 = current($product->{'product'}->{'attributes'});
                $att1shift = current($att1);
                $key = $att1shift['name'];
                $value = $product->{'product'}->{'attributes'}{$key}{'data'}{'options'}{0};

                $att2 = next($product->{'product'}->{'attributes'});
                $att2shift = current($att2);
                $key2 = $att2shift['name'];
                $value2 = $product->{'product'}->{'attributes'}{$key2}{'data'}{'options'}{0};                   

                $nutrition[$product->{'product'}->{'id'}] = array($key => $value, $key2 => $value2 );
            }
            json_encode($nutrition);

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多