Это работает, но чувствует себя действительно «грязным»
У меня есть схема JSON, как:
[
{
"url": "http://www.google.com/api/updateVariable",
"verb": "POST",
"bodySchema": {
"type": "object",
"properties": {
"StoreId": {
"sync": "True",
"type": "integer"},
"SKU": {
"sync": "True",
"type": "string"},
"WareHouseId": {
"sync": "False",
"type": "integer"},
"Stock": {
"sync": "True",
"type": "integer"}
},
"required": [
"StoreId",
"SKU",
"Stock"]
}
},
{
"url": "http://www.google.com/api/insertVariable",
"verb": "POST",
"bodySchema": {
"type": "object",
"properties": {
"StoreId": {
"sync": "True",
"type": "integer"},
"SKU": {
"sync": "True",
"type": "string"},
"WareHouseId": {
"sync": "False",
"type": "integer"},
"Description": {
"sync": "True",
"type": "integer"}
},
"required": [
"StoreId",
"SKU",
"Description"]
}
}
]
И я хочу, чтобы цикл бросить все свойства (еще раз, это работает)
$result=json_decode($result, true);
while($item = array_shift($result)){
foreach ($item as $key => $value){
if($key=="bodySchema"){
foreach ($value as $key2 => $value3){
if($key2==properties)
var_dump($value3);
}
}
}
}
То, что я хотел бы иметь что-то вроде:
$result=json_decode($result, true);
foreach($result as $mydata){
foreach($mydata->bodySchema->properties as $values){
var_dump($values->value);
}
}
это возможно ?, я хочу сохранить этот код как можно более чистым и аккуратным
Да, вы можете сделать это так, как вы хотите. У вас просто есть синтаксис для очистки.
В этом примере $result
является ассоциативным массивом, так что вы можете индексировать в него, как и любой другой массив.
$result = json_decode($result, true);
foreach ($result as $mydata) {
foreach ($mydata["bodySchema"]["properties"] as $propertyName => $schema){
var_dump([$propertyName, $schema]);
}
}
Если вы предпочитаете синтаксис объекта, отбросьте true
от json_decode
,
$result = json_decode($result);
foreach ($result as $mydata) {
foreach ($mydata->bodySchema->properties as $propertyName => $schema){
var_dump([$propertyName, $schema]);
}
}
Других решений пока нет …