以下仿照linux权限算法,对内容发布平台进行设置
/**
* 推送平台
*
* 值 显示
* 0 全部
* 1 web平台
* 2 android平台
* 4 iOS平台
*
* 3 web+android
* 5 web+iOS
* 6 android+iOS
* 7 web+android+iOS
*
* 仿unix权限规则,平台码按等比数列形式增加,如 1,2,4,8,16,32....
* 两种平台的状态码相加等于的值就表示这两种平台都显示,多个平台也一样
*
* @return array([],[]...)
* */
static function platForm()
{
return array(
// 推送平台码 、文字
['code' => '0', 'text' => '全部'],
['code' => '1', 'text' => '网站'],
['code' => '2', 'text' => '安卓'],
['code' => '4', 'text' => '苹果']
);
}
/**
* 获取当前任务推送的平台
* 为后台编辑提供
* 状态码,根据保存的platfrom的值获取任务推送的平台
* 如:传入7,返回 array(1,2,4),表示这个任务在1,2,4 平台开启推送
* @code int 所有平台码:如0,1,2,3,4,5,6,7
* @return array(1,2,4...)
*/
static function getTaskPlatForm($code = 0)
{
$plat = [];
if ($code > 0) {
$platFrom = array_reverse(self::platForm());//从大到小开始取推送的平台
foreach ($platFrom as $k => $v) {
if ($v['code'] == 0) break;
if ($code&$v['code'])$plat[] = (int)$v['code']; //使用按位与运算
}
} else {
$plat = [0];
}
return $plat;
}
/**
* 获取传入状态内的所有任务对应的platfrom的值
* 为前台筛选提供
* 如:传入2 返回 array(0,2,3,6,7),表示数据库中platfrom 为0,2,3,7,6的都允许显示
* @param $code int 唯一平台码:如0,1,2,4
* @return array(2,3,7...)
* */
static function inTaskPlatForm($code = 0)
{
$plat = [];
if ($code>0) {
$platFrom = self::platForm();
$plat_code = [];
foreach ($platFrom as $v) {
$plat_code[] = $v['code'];
}
$sum = array_sum($plat_code);
$plat = [];
for ($i = $sum; $i >= 0; $i--) {
if ($i & $code) $plat[] = $i;
}
}
$plat[]=0;
return $plat;
}