我有一个从API返回的对象,我需要查看属性是否存在。问题是属性可能是其他对象,每个对象都需要被搜索。
这可能是通过递归解决的,但我无法理解它或我的代码示例。
我很惊讶我无法找到这个在线解决方案,所以在这里发布专家建议。
这是一个对象的例子,我需要确保" LowestNewPrice"存在并返回值
stdClass Object
(
[OperationRequest] => stdClass Object
(
[HTTPHeaders] => stdClass Object
(
[Header] => stdClass Object
(
[Name] => UserAgent
[Value] => PHP-SOAP/5.6.2
)
)
[RequestId] => 20bd3916-3d92-4519-b3be-c80c7cf16b1b
[Arguments] => stdClass Object
(
[Argument] => stdClass Object
(
[Name] => Service
[Value] => AWSECommerceService
)
)
[RequestProcessingTime] => 0.005986476
)
[Items] => stdClass Object
(
[Request] => stdClass Object
(
[IsValid] => True
[ItemLookupRequest] => stdClass Object
(
[IdType] => ASIN
[ItemId] => 1405278269
[ResponseGroup] => OfferSummary
[VariationPage] => All
)
)
[Item] => stdClass Object
(
[ASIN] => 1405278269
[OfferSummary] => stdClass Object
(
[LowestNewPrice] => stdClass Object
(
[Amount] => 44
[CurrencyCode] => GBP
[FormattedPrice] => £0.44
)
[LowestUsedPrice] => stdClass Object
(
[Amount] => 1
[CurrencyCode] => GBP
[FormattedPrice] => £0.01
)
[TotalNew] => 30
[TotalUsed] => 12
[TotalCollectible] => 0
[TotalRefurbished] => 0
)
)
)
)
答案 0 :(得分:2)
我的解决方案:
strpos
检查密钥是否存在,如果您只需检查密钥是否存在,或使用preg_match()
搜索对key=>value
答案 1 :(得分:1)
由于它总是在同一个地方我会使用这个
/* CSS */
html, body {
margin: 0;
padding: 0;
overflow: hidden;
}
#home {
position: absolute;
top: 0;
left: 0;
width: 100%;
min-height: 100vh;
margin: 0;
z-index: 9;
display: block;
background-color: #1abc9c;
}
#page1 {
position: absolute;
top: 0;
left: 100vw;
width: 100%;
min-height: 100vh;
margin: 0;
display: block;
z-index: 99;
background-color: #2ecc71;
}
#page2 {
position: absolute;
top: 100vh;
left: 0;
width: 100%;
min-height: 100%;
margin: 0;
display: block;
background-color: #3498db;
}
.moveleft {
transform:translate(-100vw, 0);
-moz-transform:translate(-100vw, 0);
-ms-transform:translate(-100vw, 0);
-webkit-transform:translate(-100vw, 0);
-o-transform:translate(-100vw, 0);
transition: transform 700ms;
-webkit-transition-timing-function: ease-in;
transition-timing-function: cubic-bezier(.86,.01,.77,.78);
-webkit-transition-delay: 200ms;
transition-delay: 200ms;
}
.movecenter {
transform: translate(0, 0);
-moz-transform: translate(0, 0);
-ms-transform: translate(0, 0);
-webkit-transform: translate(0, 0);
-o-transform: translate(0, 0);
transition: transform 700ms;
-webkit-transition-timing-function: ease-in;
transition-timing-function: cubic-bezier(.86,.01,.77,.78);
-webkit-transition-delay: 200ms;
transition-delay: 200ms;
}
.moveup {
transform: translate(0, -100vh);
-moz-transform: translate(0, -100vh);
-ms-transform: translate(0, -100vh);
-webkit-transform: translate(0, -100vh);
-o-transform: translate(0, -100vh);
transition: transform 700ms;
-webkit-transition-timing-function: ease-in;
transition-timing-function: cubic-bezier(.86,.01,.77,.78);
-webkit-transition-delay: 200ms;
transition-delay: 200ms;
}
.movedown {
transform: translate(0, 0);
-moz-transform: translate(0, 0);
-ms-transform: translate(0, 0);
-webkit-transform: translate(0, 0);
-o-transform: translate(0, 0);
transition: transform 700ms;
-webkit-transition-timing-function: ease-in;
transition-timing-function: cubic-bezier(.86,.01,.77,.78);
-webkit-transition-delay: 200ms;
transition-delay: 200ms;
}
答案 2 :(得分:0)
罗马的一种方式..
$findInObject = function($obj,$property) use (&$findInObject){
if(is_object($obj)){
$obvar = get_object_vars($obj);
if(array_key_exists($property,$obvar)){
return $obvar[$property];
} else {
foreach($obvar as $var){
$result = $findInObject($var,$property);
if($result){
return $result;
}
}
}
}
return null;
};
$obj = new stdClass();
$obj->MyProp1 = new stdClass();
$obj->MyProp1b = new stdClass();
$obj->MyProp1->MyProp2 = 'myresult';
$obj->MyProp1->MyProp2b = 'myresultb';
print_r($findInObject($obj,'MyProp2'));//Result: myresult
print_r($findInObject($obj,'MyProp2b'));//Result: myresultb
//OR
print_r($findInObject($obj->MyProp1,'MyProp2b'));//Result: myresultb
答案 3 :(得分:0)
您可以使用isset
检查对象属性:
if(isset($response->Items->Item->OfferSummary->LowestNewPrice)) {
// LowestNewPrice exists
} else {
// Doesn't exist or one of the properties doesn't exist
}
这样,您无需单独检查每个属性。