$ONEANSWER = '{
"name": "Attendee terms and conditions",
"id": "1z6wzmd95",
"numberofcolumns": "1",
"type": "check-box",
"answers": {
"answer": {
"@attributes": {
"code": "1z6x061vg",
"revision": "8969663434"
},
"name": "Attendee terms and conditions",
"sort": "0",
"type": "label"
}
}
}';
$THREEANSWERS ='{
"name": "GPP What printing are you responsible for (please select all that apply)?",
"id": "1ygc0dvbi",
"numberofcolumns": "2",
"type": "check-box",
"answers": {
"answer": [
{
"@attributes": {
"code": "1yx7dx07w",
"revision": "8986379556"
},
"name": "Advertising - posters / signage",
"sort": "0",
"type": "label"
},
{
"@attributes": {
"code": "1ygc0eaqt",
"revision": "8986379550"
},
"name": "Books and photo books",
"sort": "1",
"type": "label"
},
{
"@attributes": {
"code": "1yx7dx07y",
"revision": "8986379557"
},
"name": "Décor",
"sort": "2",
"type": "label"
}
]
}
}';
$ONEANSWER =json_decode($ONEANSWER, true);
$THREEANSWERS =json_decode($THREEANSWERS , true );
echo count($ONEANSWER['answers']); //expect 1 get 1
echo count($ONEANSWER['answers']['answer']); //expect 1 get 4
echo count($THREEANSWERS ['answers']); //expect 1 get 1
echo count($THREEANSWERS ['answers']['answer']); //expect 3 get 3
运行上面的返回4,但我期待1。这里有一个1 'array->answers->answer'节点那我怎么得到4呢?
我有完全相同的JSON格式与多个"答案"和相同的方法是返回正确的数量。只有一个答案,却似乎失败了?
感谢如果是关联数组,则为顺序数组
function isAssoc($array) {
$array = array_keys($array);
return ($array !== array_keys($array));
}
if (isAssoc($ONEANSWER['answers']['answer'])) {
$ONEANSWER['answers']['answer'] = [$ONEANSWER['answers']['answer']];
}
if (isAssoc($THREEANSWERS['answers']['answer'])) {//it's not associative array
$THREEANSWERS['answers']['answer'] = [$THREEANSWERS['answers']['answer']];
}
使用isAssocOK仅供参考,因此根据多个评论,'answer'节点在响应JSON中的格式不同,如果有多个'答案',请注意多个答案示例上的方括号。
设置一个数组的答案使它工作
echo count(array($ONEANSWER['answers']['answer'])); //expect 1 get 1
在生产中,我可以检查它是否是一个数组,如果不是,就把它变成一个。