在 PHP 中访问 stdClass 中第一个属性的属性名称

Bla*_*ell 4 php php-5.6

在对 json 字符串执行 json_decode 后,我有一个由许多 stdClass 组成的数组。

它看起来像这样:

product: array(3)
0: stdClass
   PropertyAbc: "Product 1|Product 5"
1: stdClass
   PropertyXyz: "Product 2|Product 9|Product 10"
2: stdClass
   PropertyEfg: "Product 3|Product 12"
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为以下格式的所有值的管道分隔字符串:PropertyName>Value 作为我的最终结果:

PropertyAbc>产品 1|PropertyAbc>产品 5|PropertyXyz>产品 2|PropertyXyz>产品 9|PropertyXyz>产品 10|PropertyEfg>产品 3|PropertyEfg>产品 12

这是我尝试执行此操作的方法,但无法弄清楚如何在循环 stdClasses 时获取第一个属性的值和名称(注意:每个 stdClass 始终只有一个属性):

foreach ($json->products as $product) {
    // Put all products in an array
    $arr = explode('|', $NEED-VALUE-OF-FIRST-PROP);

    // Loop through array and combine values
    foreach ($arr as $key => $value) {
        $arr[$key] = $NEED-NAME-OF-FIRST-PROP . ">" . $value;
    }
}
Run Code Online (Sandbox Code Playgroud)

Wil*_*oti 5

get_object_vars对于以数组形式获取对象属性并从那里开始工作非常有用。

 $p1 = new StdClass();
 $p1->PropertyAbc = "Product 1|Product 5";

 $p2 = new StdClass();
 $p2->PropertyXyz = "Product 2|Product 9|Product 10";

 $p3 = new StdClass();
 $p3->PropertyEfg = "Product 3|Product 12";

 $products = [ $p1, $p2, $p3 ];
 foreach ($products as $product) {
    $productArray = get_object_vars($product);
    $productPropName = array_keys($productArray)[0];
    $productPropsValues = explode('|', array_values($productArray)[0]);
    foreach ($productPropsValues as $productPropsValue) {
        $result[] = $productPropName . '>' . $productPropsValue;
    }
}

var_dump(implode('|', $result));
Run Code Online (Sandbox Code Playgroud)

字符串(155)“PropertyAbc>产品 1|PropertyAbc>产品 5|PropertyXyz>产品 2|PropertyXyz>产品 9|PropertyXyz>产品 10|PropertyEfg>产品 3|PropertyEfg>产品 12"