Php 根据给定的用户id对数组进行排序';s表示排序,但不从数组中删除原始数据

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

我有两个数组,一个数组是从数据库中提取的,第二个是用户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($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我已经提到了数组和所需结果,请查看我的问题。非常感谢。