【发布时间】:2019-05-27 09:14:30
【问题描述】:
如何从数组中获取最大值?例如,我试图获得每个测验的最高结果,而不是同一测试的多个结果。
我有一个如下所示的数组:
[
{
"ID":"806",
"user_login":"123456789",
"post_title":"Foo Test 1",
"display_name":"John Doe",
"activity_meta_value":"100",
"activity_completed":"1543142130"
},
{
"ID":"806",
"user_login":"123456789",
"post_title":"Foo Test 2",
"display_name":"John Doe",
"activity_meta_value":"75",
"activity_completed":"1543144312"
},
{
"ID":"806",
"user_login":"123456789",
"post_title":"Foo Test 2",
"display_name":"John Doe",
"activity_meta_value":"75",
"activity_completed":"1543144528"
},
{
"ID":"1167",
"user_login":"987654321",
"post_title":"Foo Test 2",
"display_name":"Karen Eliot",
"activity_meta_value":"75",
"activity_completed":"1543156089"
},
{
"ID":"1167",
"user_login":"987654321",
"post_title":"Foo Test 2",
"display_name":"Karen Eliot",
"activity_meta_value":"100",
"activity_completed":"1543156480"
}
]
然后我将数组重新排列为以下结构,以使其更易于使用。这是我重新排列后的数组输出。
[
{
"id":"806",
"user_login":"123456789",
"user_name":"John Doe",
"quizes":[
{
"quiz":"Foo Test 1",
"score":"90",
"quiz_completed":"1543141990"
},
{
"quiz":"Foo Test 1",
"score":"100",
"quiz_completed":"1543142130"
},
{
"quiz":"Foo Test 2",
"score":"75",
"quiz_completed":"1543144312"
},
{
"quiz":"Foo Test 2",
"score":"75",
"quiz_completed":"1543144528"
}
]
},
{
"id":"1167",
"user_login":"987654321",
"user_name":"Karen Eliot",
"quizes":[
{
"quiz":"Foo Test 2",
"score":"75",
"quiz_completed":"1543156089"
},
{
"quiz":"Foo Test 2",
"score":"100",
"quiz_completed":"1543156480"
}
]
}
]
我通过使用以下函数来做到这一点:
function student_scores( $data ) {
global $wpdb;
$quizzes = $wpdb->get_results( " SELECT $wpdb->users.ID, $wpdb->users.user_login, $wpdb->posts.post_title, $wpdb->users.display_name, " . $wpdb->prefix . "learndash_user_activity_meta.activity_meta_value, " . $wpdb->prefix . "learndash_user_activity.activity_completed
FROM " . $wpdb->prefix . "learndash_user_activity
INNER JOIN $wpdb->users ON " . $wpdb->prefix . "learndash_user_activity.user_id = $wpdb->users.ID
INNER JOIN " . $wpdb->prefix . "learndash_user_activity_meta ON " . $wpdb->prefix . "learndash_user_activity.activity_id = " . $wpdb->prefix . "learndash_user_activity_meta.activity_id
INNER JOIN $wpdb->posts ON " . $wpdb->prefix . "learndash_user_activity.post_id = $wpdb->posts.ID
INNER JOIN $wpdb->usermeta ON $wpdb->users.ID = $wpdb->usermeta.user_id
WHERE " . $wpdb->prefix . "learndash_user_activity.activity_type = 'quiz' AND " . $wpdb->prefix . "learndash_user_activity_meta.activity_meta_key = 'percentage' AND " . $wpdb->prefix . "usermeta.meta_value = " . $data['id'] . "GROUP BY " . $wpdb->prefix . "learndash_user_activity.activity_id ", ARRAY_A );
$out = array();
foreach ( $quizzes as $x ) {
$out[ $x['ID'] ]['id'] = $x['ID'];
$out[ $x['ID'] ]['user_login'] = $x['user_login'];
$out[ $x['ID'] ]['user_name'] = $x['display_name'];
$out[ $x['ID'] ]['quizes'][] = array(
'quiz' => $x['post_title'],
'score' => $x['activity_meta_value'],
'quiz_completed' => $x['activity_completed']
);
}
if ( empty( $out ) ) {
return new WP_Error(
'no_students',
'invalid group',
array(
'status' => 404
)
);
}
return array_values( $out );
}
我想为每个用户的每个测试获得最高值。每个用户有 2 次参加测验,我想在同一测试中获得更高的分数。例如,如果用户参加了 Foo Test 1 测验两次,第一次得到 50,第二次得到 70,我想只返回 Foo Test 1 的 70。
我希望我的问题足够清楚。提前致谢。
【问题讨论】:
-
那么你想得到每个测试的最高值吗?还是每个用户名的最大值?还是所有人的最高价值?
-
@DavidWinder 我想为每个用户的每个测试获得最高值。每个用户有 2 次参加测验,我想在同一测试中获得更高的分数。例如,如果用户参加了 Foo Test 1 测验两次,第一次得到 50,第二次得到 70,我想只返回 Foo Test 1 的 70。希望现在更有意义。
标签: php arrays multidimensional-array highest