我从另一个组织的API获得JSON编码的输出。
在许多情况下,输出可以是一个对象数组(如果有很多)或一个对象(如果只有一个)。现在我正在写这样折磨的代码:
if ( is_array($json['candidateList']['candidate'][0]) ) {
foreach ($json['candidateList']['candidate'] as $candidate) {
// do something to each object
}
}
else {
// do something to the single object
}
我如何处理它,以便我的代码中的“做某事”部分只出现一次并使用标准语法?
答案 0 :(得分:2)
你应该告诉谁提供feed它应该更加一致:)在这种情况下,总是有一个数组是合适的,即使只有一个候选者,所以你只有一个元素数组
答案 1 :(得分:2)
<?php
// When json is an object, convert to an array with a single member
if (is_object($json)) $json = array($json);
foreach ($json as $object) {
// do something to each object
}
答案 2 :(得分:2)
如果不是,请将其设为数组 - 然后继续迭代。
// Normalize response into an array
if ( !is_array( $json['candidateList']['candidate'] ) )
{
$json['candidateList']['candidate'] = array( $json['candidateList']['candidate'] );
}
// Process data
foreach ($json['candidateList']['candidate'] as $candidate) {
// do something to each object
}
答案 3 :(得分:1)
在函数中放入“do something”代码,然后从两个地方调用该函数。这具有模块化代码的附带好处。
或者,你可以检测到你只有一个元素并围绕它构建一个数组,然后在两个地方使用你的数组处理代码。
(旁注:我同意Jaanus。一个结构良好的API会在两种情况下都返回一个列表,即使该列表只有一个成员长。对于完全这个原因。)
答案 4 :(得分:0)
如果你能改变api,那就去Jaanus的回答吧。否则,可能编写一个接受值的函数并返回值(如果值是数组)或包含该值的单元素数组(如果不是)。