这看起来有点令人费解,但确实还不错。我有一个看起来像这样的JSON对象:
{'result': [{'label': {'field1': 'value1',
'field2': 'value2',
'field3': 'value3'},
'names': {'field1': 'value4',
'field2': 'value5',
'field3': 'value6'},
'score': {'field1': 0.9336825,
'field2': 0.9711186,
'field3': 0.7606185}},
{'label': {'field1': 'value7',
'field2': 'value8',
'field3': 'value9'},
'names': {'field1': 'value10',
'field2': 'value11',
'field3': 'value12'},
'score': {'field1': 0.9336825,
'field2': 0.9711186,
'field3': 0.13707103}}]}
result
是词典列表。每个这样的dictionary
具有3个键,即label
,name
和score
。这些键中的每个键的值再次是具有3个字段的字典,为简单起见,可以说field1
,field2
和field3
。 result
中可以有任意数量的列表(尽管通常少于10个)。我想获取具有最大['score']['field3']
值的列表(及其后续项目)。这些值的范围为0到1。遍历列表并跟踪max
得分:
$resp=json_decode($response,TRUE);
$max = -9.99;
foreach ($resp['result'] as $item)
{
if ($item['score']['field3'] > $max)
{
$max = $item['score']['field3'];
$product_code = $item['label']['field1'];
$product_name = $item['names']['field1'];
$product_score = $item['score']['field1'];
$topic_code = $item['label']['field2'];
$topic_name = $item['names']['field2'];
$topic_score = $item['score']['field2'];
$intent_code = $item['label']['field3'];
$intent_name = $item['names']['field3'];
$intent_score = $item['score']['field3'];
}
}
有更好的方法吗?
$resp=json_decode($response,TRUE);
$max = -9.99;
$maxItem = [];
foreach ($resp['result'] as $item)
{
if ($item['score']['field3'] > $max)
{
$max = $item['score']['field3'];
$maxItem = $item;
}
}
$product_code = $maxItem['label']['field1'];
$product_name = $maxItem['names']['field1'];
$product_score = $maxItem['score']['field1'];
$topic_code = $maxItem['label']['field2'];
$topic_name = $maxItem['names']['field2'];
$topic_score = $maxItem['score']['field2'];
$intent_code = $maxItem['label']['field3'];
$intent_name = $maxItem['names']['field3'];
$intent_score = $maxItem['score']['field3'];
两种方法中的任何一种,都无法遍历所有值,无法找到最大值。