以下仿照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; }