Php 根据给定的用户id对数组进行排序';s表示排序,但不从数组中删除原始数据
我有两个数组,一个数组是从数据库中提取的,第二个是用户id的数组,我想根据第二个给定数组对提取的用户数组进行排序。我希望那些位于数组顶部的用户在中的第二个数组中存在,而那些在第二个输入数组中不存在的用户也将在php中排序后出现Php 根据给定的用户id对数组进行排序';s表示排序,但不从数组中删除原始数据,php,Php,我有两个数组,一个数组是从数据库中提取的,第二个是用户id的数组,我想根据第二个给定数组对提取的用户数组进行排序。我希望那些位于数组顶部的用户在中的第二个数组中存在,而那些在第二个输入数组中不存在的用户也将在php中排序后出现 $sortArr = array(14,25); $dbArr = array(7,5,100,25,110,78,14); sort_tag_able_users($sortArr,$dbArr); function sort_tag_able_users($inpu
$sortArr = array(14,25);
$dbArr = array(7,5,100,25,110,78,14);
sort_tag_able_users($sortArr,$dbArr);
function sort_tag_able_users($inputs, $db_inputs) {
foreach ($db_inputs as $url_response) {
$key = array_search($url_response, $inputs);
$result[$key] = $url_response;
}
ksort($result);
return $result;
}
echo "Returned Reusult";
Array
(
[0] => 14
[1] => 25
)
echo "Required Reusult";
Array
(
[0] => 14
[1] => 25
[2] => 7
[3] => 5
[4] => 100
[5] => 110
[6] => 78
)
上面的函数,我有它只返回匹配的用户和发回用户从数据库阵列删除。
帮助解决此问题。您可以将代码更改为以下内容:
public static function sort_tag_able_users($inputs, $db_inputs) {
foreach ($db_inputs as $url_response) {
// assume that the user was not found
$found = 0;
$key = array_search($url_response->id, $inputs);
if ($key != false) {
// user was found
$found = 1;
}
// group the users in two sub-arrays
$users[$found][$url_response->id] = $url_response;
}
// append users that were not found after the users that were found
$result = $users[1] + $users[0];
return $result;
}
这样,所有用户都将按您所查找的顺序保留。问题是
$key
对于$inputs
中不存在的所有ID都将是相同的(false
),因此您多次覆盖$result[false]
,只剩下最后一个值
改用usort
比较回调:
public static function sort_tag_able_users($inputs, $db_inputs) {
usort($db_inputs, function ($a, $b) use ($inputs) {
$a = array_search($a->id, $inputs);
$b = array_search($b->id, $inputs);
if ($a === $b) {
return 0;
} else if ($a === false) {
return 1;
} else if ($b === false) {
return -1;
} else {
return $a - $b;
}
});
return $db_inputs;
}
你能粘贴数组结构和预期结果的示例吗?在问题中提及你的两个数组,以及你想从这些数组中提取什么结果可能的重复-如果你使用常规的自定义排序回调,问题就会得到解决;问题是,
$key
对于所有不存在的ID都是相同的,因此您将覆盖所有ID。@Bunkboy我已经提到了数组和所需结果,请查看我的问题。非常感谢。