2つの配列があります。1つの配列はデータベースからフェッチされ、2番目はユーザーIDの配列です。つまり、フェッチされたユーザー配列を2番目に指定された配列に基づいて並べ替えます。の2番目の配列に存在する配列の一番上にあるユーザーと、2番目の入力配列に存在しないユーザーも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
)
上記の関数は、db配列から削除された一致したユーザーと残りのユーザーのみを返します。この問題の解決にご協力ください。
問題は、に存在しないすべてのIDで$key
同じ(false
)になるため$inputs
、$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;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加