【发布时间】:2012-04-13 14:34:27
【问题描述】:
我的数据正在从客户的 CMS 中提取,但我得到了奇怪的结果
print_r($appliance_data);
foreach ($appliance_data as $adKey => $adValue) {
print_r($adKey);
print_r($adValue);
print_r(array_key_exists($adKey, $appliance_data));
print_r(isset($appliance_data[$adKey]));
}
有输出
Array
(
[94] => stdClass Object
(
[operation] => 0
[value] => 0
)
[102] => stdClass Object
(
[operation] => 501
[value] => 4
)
[90] => stdClass Object
(
[operation] => 0
[value] => 0
)
)
94
stdClass Object
(
[operation] => 0
[value] => 0
)
(boolean) FALSE
(boolean) FALSE
102
stdClass Object
(
[operation] => 501
[value] => 4
)
(boolean) FALSE
(boolean) FALSE
90
stdClass Object
(
[operation] => 0
[value] => 0
)
(boolean) FALSE
(boolean) FALSE
知道是什么原因造成的吗?
编辑:错误是 array_key_exists AND isset 为通过循环数组获得的键返回 FALSE!
serialize($appliance_data)
a:7:{s:2:"94";O:8:"stdClass":3:{s:9:"operation";s:3:"514";s:5:"value";s:1:"2";s:9:"frequency";s:1:"0";}s:3:"102";O:8:"stdClass":3:{s:9:"operation";s:3:"511";s:5:"value";s:1:"4";s:9:"frequency";s:1:"1";}s:2:"90";O:8:"stdClass":3:{s:9:"operation";s:1:"0";s:5:"value";s:1:"0";s:9:"frequency";s:1:"0";}s:2:"68";O:8:"stdClass":3:{s:9:"operation";s:3:"501";s:5:"value";s:1:"3";s:9:"frequency";s:1:"2";}s:2:"66";O:8:"stdClass":3:{s:9:"operation";s:1:"0";s:5:"value";s:1:"0";s:9:"frequency";s:1:"0";}s:2:"84";O:8:"stdClass":3:{s:9:"operation";s:1:"0";s:5:"value";s:1:"0";s:9:"frequency";s:1:"0";}s:2:"98";O:8:"stdClass":3:{s:9:"operation";s:1:"0";s:5:"value";s:1:"0";s:9:"frequency";s:1:"0";}}
【问题讨论】:
-
您的某些代码很奇怪(不会按原样运行 - print_r() 之后的括号太多)。循环位看起来应该可以正常运行,而最后一行应该会导致错误。您可以通过运行它来确认这一点吗?当我尝试类似的代码时,我的循环运行良好。
-
@Matt,额外的括号是由于代码位于客户端 CMS 的深处。该数组由客户端 CMS 提供,所以我认为它的编码不正确!
标签: php array-key-exists