You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过关联对象值对PHP数组(RCP会员列表)排序

解决方案

要实现按会员姓氏(LastName)排序,你需要先把所有会员的相关数据收集到一个数组中,再用PHP的usort()函数根据姓氏字段排序,最后遍历排序后的数组生成表格。具体修改如下:

修改后的完整代码

// Get array of Active RCP members
$memberships = rcp_get_memberships( array('status' => 'active') );

// 先收集所有会员的完整数据到数组
$membersData = [];
foreach ($memberships as $membership) {
    $customer = $membership->get_customer(); 
    $user_id = $customer->get_user_id();

    $user_info = get_userdata($user_id);
    // 把需要的字段都存入数组
    $membersData[] = [
        'first_name' => $user_info->first_name,
        'last_name'  => $user_info->last_name,
        'school'     => get_user_meta( $user_id, 'rcp_school', true ),
        'role'       => get_user_meta( $user_id, 'rcp_role', true ),
        'gender'     => get_user_meta( $user_id, 'rcp_gender', true ),
        'email'      => $user_info->user_email,
        'phone'      => get_user_meta( $user_id, 'rcp_phone', true )
    ];
}

// 按姓氏(last_name)升序排序(如果要降序,把$a和$b调换位置)
usort($membersData, function($a, $b) {
    return strcmp($a['last_name'], $b['last_name']);
});

// 生成表格内容(补充原代码缺失的表格起始标签)
$message = '<table>';
foreach ($membersData as $member) {
    $message .= '<tr>
        <td class="directory-cell">' . $member['last_name'] . ', ' . $member['first_name'] . '</td>
        <td class="directory-cell">' . $member['school'] . '</td>
        <td class="directory-cell">' . $member['role'] . '</td>
        <td class="directory-cell">' . $member['gender'] . '</td>
        <td class="directory-cell">' . $member['email'] . '</td>
        <td class="directory-cell">' . $member['phone'] . '</td>
    </tr>';
}

// Close table after all active members are looped through  
$message .= '</table>';

// Return output for shortcode
return $message;

关键说明

  • 数据收集:先把每个会员的姓名、元数据等信息统一存入$membersData数组,这样后续排序时能直接访问到last_name字段。
  • 排序逻辑:usort()是PHP的自定义排序函数,这里用匿名函数对比两个会员的last_name,strcmp()函数会按字符串自然顺序比较,返回排序所需的差值。如果需要降序排列,只需把strcmp($a['last_name'], $b['last_name'])改成strcmp($b['last_name'], $a['last_name'])即可。
  • 表格生成:遍历排序后的$membersData数组,直接取出字段拼接HTML,逻辑更清晰。

另外补充了原代码缺失的<table>起始标签,确保HTML结构完整。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 01:36:35