gpt4 book ai didi

php - 我该如何优化以下代码?

转载 作者:行者123 更新时间:2023-11-29 06:35:54 24 4
gpt4 key购买 nike

$project_query= $db->query("SELECT * FROM projects WHERE id='$task_info->project_id'");
$project_info = $project_query->fetch_object();
$admins_array = $project_info->admins_array;

$admins = unserialize($admins_array);
$is_admin = false;
foreach($admins as $value) {
if($value == $_SESSION['username']) { $is_admin = true; }
}

我有以下代码检查当前登录用户的用户名是否包含在存储在 mysql 表行中的序列化数组中。我将如何优化它以获得最佳性能?

最佳答案

1) 如果可以更改数据库结构,我建议将序列化值存储在单独的表中

project_admins (project_id, user_id)(project_id,user_id) 上有唯一索引

然后可以快速判断用户是否是项目的管理员

SELECT 1 from project_admins where project_id = x and user_id = y

2) 如果您坚持在数据库中存储序列化数据,我建议存储由 username 索引的序列化数组所以你可以在恒定时间内搜索它

$is_admin = array_key_exists($_SESSION['username'],$admins);

3) 如果您不能通过用户名索引 admins 数组,您可以在找到匹配项后通过添加 break 语句来最低限度地优化循环

foreach($admins as $value) {
if($value == $_SESSION['username']) {
$is_admin = true;
break; // match found no need to check remaining values
}
}

实际上在这种情况下你最好使用 in_array

$is_admin = in_array($_SESSION['username'],$admins);

关于php - 我该如何优化以下代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24845172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com