如何解决PHP 按位将数据库中的值与数组进行比较
实际上,我想将表中的某些值与数组进行比较,并输出与数组具有相等值的键。 问题是:如果我是对的,数据库中的值是按位的。不知道用英文解释是否正确。
示例:这里的一些示例值形成表 1,65,2081,2145,18497,32769 65 包含 64 是“UR_LEAD”和 1 是“UR_SWP”
这里是我想比较的数组:
$userrights_array = array(
"UR_SWP" => 1,"UR_BUHA" => 2,"UR_AZ" => 4,"UR_SA" => 8,"UR_FIDI" => 16,"UR_ADMIN" => 32,"UR_LEAD" => 64,"UR_AZ_EVENT" => 128,"UR_SA_COMPLIANCE" => 256,"UR_CH" => 512,"UR_USERMOD" => 1024,"UR_SWP_GL" => 2048,"UR_MEDB" => 4096,"UR_SWP_GP" => 8192,"UR_STAFF_DEPT" => 16384,"UR_MEET_KEYUSER" => 32768,"UR_MEET_ADMIN" => 65536
);
这里是遍历数组的示例,实际上是来自数据库的假结果以简化代码。
$fakerow = 256;
foreach ($userrights_array as $key => $value) {
if ($value == $fakerow) {
print_r($key);
}
};
我现在需要的是一种解决方案,不仅可以打印出数据库的值,还可以执行将数组中的值与数据库中的值进行比较并检查哪个适合例如 65 的操作。
我猜我必须在 if 部分进行比较,但不知道如何做。
输出应该像“UR_SWP”+“UR_LEAD”
我的表单中的实际结果如下所示:
解决方法
如果您想以文字形式打印出权限,您可以先使用 let rectObj = canvas1.getObjects()[0];
const tl = rectObj.aCoords.tl;
const tr = rectObj.aCoords.tr;
const bl = rectObj.aCoords.bl;
let rectCopy = new fabric.Rect({
left: rectObj.aCoords.tl.x,top: rectObj.aCoords.tl.y,width: (new fabric.Point(tl.x,tl.y).distanceFrom(tr)),height: (new fabric.Point(tl.x,tl.y).distanceFrom(bl)),angle: fabric.util.radiansToDegrees(Math.atan2(tr.y - tl.y,tr.x - tl.x)),fill: "red",})
以文字形式创建具有权限的值映射。这里的重点是收集当前权限中bit为1的权限。
现在,只需将手头的当前权限值转换为二进制并收集特定 2 的幂的适当权限并打印出结果。
array_flip()
,
“按位与”(&
) 运算符是一个选项:
<?php
$userrights = array(
"UR_SWP" => 1,"UR_BUHA" => 2,"UR_AZ" => 4,"UR_SA" => 8,"UR_FIDI" => 16,"UR_ADMIN" => 32,"UR_LEAD" => 64,"UR_AZ_EVENT" => 128,"UR_SA_COMPLIANCE" => 256,"UR_CH" => 512,"UR_USERMOD" => 1024,"UR_SWP_GL" => 2048,"UR_MEDB" => 4096,"UR_SWP_GP" => 8192,"UR_STAFF_DEPT" => 16384,"UR_MEET_KEYUSER" => 32768,"UR_MEET_ADMIN" => 65536
);
$rows = array(1,65,2081,2145,18497,32769);
foreach ($rows as $row) {
echo $row.": ";
foreach ($userrights as $key => $userright) {
if ($userright & $row) {
echo $key.",";
}
};
echo "<br>";
}
?>
如果您想将结果存储在字符串变量或数组中,这可能会有所帮助:
<?php
...
// Store the output as a text
$output = "";
foreach ($rows as $row) {
$output .= ($output === "" ? "" : ",");
foreach ($userrights as $key => $userright) {
if ($userright & $row) {
$output .= ($output === "" ? "" : " ") . $key;
}
};
}
echo $output;
echo "<br>";
// Store the output as an array
$output = array();
foreach ($rows as $row) {
$s = "";
foreach ($userrights as $key => $userright) {
if ($userright & $row) {
$s .= ($s === "" ? "" : " ") . $key;
}
};
$output[] = $s;
}
echo print_r($output,true);
echo "<br>";
?>
结果:
1: UR_SWP,65: UR_SWP,UR_LEAD,2081: UR_SWP,UR_ADMIN,UR_SWP_GL,2145: UR_SWP,18497: UR_SWP,UR_STAFF_DEPT,32769: UR_SWP,UR_MEET_KEYUSER,UR_SWP,UR_SWP UR_LEAD,UR_SWP UR_ADMIN UR_SWP_GL,UR_SWP UR_ADMIN UR_LEAD UR_SWP_GL,UR_SWP UR_LEAD UR_SWP_GL UR_STAFF_DEPT,UR_SWP UR_MEET_KEYUSER
Array (
[0] => UR_SWP
[1] => UR_SWP UR_LEAD
[2] => UR_SWP UR_ADMIN UR_SWP_GL
[3] => UR_SWP UR_ADMIN UR_LEAD UR_SWP_GL
[4] => UR_SWP UR_LEAD UR_SWP_GL UR_STAFF_DEPT
[5] => UR_SWP UR_MEET_KEYUSER
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。