在对 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)
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"