2

我正在检索数组中的用户列表(仅限 ID),该数组表示用户之间的连接。这个想法是显示 X 个用户并隐藏其余用户,因此设置头像的用户是优先考虑的。

这就是我所拥有的无法正常工作的:

// Get all connection id's with avatars
$members_with_photos = get_users(array('meta_key' => 'profile_avatar', 'include' => $connections));

// Shuffle them
shuffle($members_with_photos);

// Add the the all_members list
foreach($members_with_photos as $member_with_photo){
    $all_members[] = $member_with_photo->ID;
}

// Get all connection id's without avatars
$members_without_photos = get_users(array('exclude' => $all_members, 'include' => $connections));

// Shuffle them
shuffle($members_without_photos);

// Also add them to the list
foreach($members_without_photos as $member_without_photos){
    $all_members[] = $member_without_photos->ID;
}

问题是 $members_without_photos 填充了 $connections 数组中的每个用户。这意味着包含优先于排除。

需要发生的是 get_users() 需要从连接中查找用户,但排除已经找到的用户(带有头像),以便没有头像的用户将出现在 $all_members 数组中的最后。

我现在修复它的方法是在 $all_members 数组上使用 array_unique() ,但我认为这更像是一个肮脏的修复。有人可以在这里指出我正确的方向吗?

4

1 回答 1

0

您可以array_diff在 PHP 中使用和计算包含列表。这应该给出您正在寻找的行为。添加的代码array_diff

// Get all connection id's with avatars
$members_with_photos = get_users(array('meta_key' => 'profile_avatar', 'include' => $connections));

// Shuffle them
shuffle($members_with_photos);

// Add the the all_members list
foreach($members_with_photos as $member_with_photo){
    $all_members[] = $member_with_photo->ID;
}

// Get all connection id's without avatars
$members_without_photos_ids = array_diff($connections, $all_members);

$members_without_photos = get_users(array('include' => $members_without_photos_ids));

// Shuffle them
shuffle($members_without_photos);

// Also add them to the list
foreach($members_without_photos as $member_without_photos){
    $all_members[] = $member_without_photos->ID;
}
于 2015-11-18T17:48:10.683 回答