PHP - 格式化字符串输出


PHP - Formatting string output

我正在尝试根据分配给用户的值操作文本字符串。

全文字符串是"列表、项目、案例、标识和位置",这仅针对 ADMIN 完整显示。

系统上的每个用户都具有访问权限。每项权利都决定了他们能做什么和不能做什么。所以访问权限a1 = 'Lists'b1 = 'Items'等...

当用户登录页面时,会显示他们有权访问的内容。

例如:

Welcome $user
You have access to $foo

对于管理员用户..这将看起来像:

Welcome Admin
You have access to Lists, Items, Cases, Identity and Location

所以现在我正在尝试执行以下操作:

if ($user == 'admin') $foo = 'Lists, Items, Cases, Identity and Location'; // full access

但是我需要能够更改每个用户的值。

$foo ='';
if (strpos($access,'a1') !== false) $foo .= 'Lists ';
if (strpos($access,'b1') !== false) $foo .= 'Items ';
if (strpos($access,'c1') !== false) $foo .= 'Cases ';
if (strpos($access,'d1') !== false) $foo .= 'Identity ';
if (strpos($access,'e1') !== false) $foo .= 'Location ';

我遇到的问题是标点符号搞砸了。用户 Miz 有权访问 a1,b1,c1

当她登录时,她得到:

Welcome Miz
You have access to Lists Items Cases

我想说的是:

Welcome Miz
You have access to Lists, Items and Cases

谁能建议实现这一目标的最佳方法

谢谢

use implode()

<?php
$arr = array();
if (strpos($access,'a1') !== false) $arr[] =  'Lists ';
if (strpos($access,'b1') !== false) $arr[] =  'Items ';
if (strpos($access,'c1') !== false) $arr[] =  'Cases ';
if (strpos($access,'d1') !== false) $arr[] =  'Identity ';
if (strpos($access,'e1') !== false) $arr[] =  'Location ';
$last = array_pop($arr);
$foo = count($arr) ? implode(", ", $arr) . " AND " . $last : $last;
?>

尝试使用数组并连接:

$rights = array();
$foo = '';
if (strpos($access, 'a1') !== false)
    $rights[] = 'Lists ';
if (strpos($access, 'b1') !== false)
    $rights [] = 'Items ';
if (strpos($access, 'c1') !== false)
    $rights [] = 'Cases ';
if (strpos($access, 'd1') !== false && strpos($access, 'e1') !== false) {
    $rights[] = "Identity and Location";
} else {
    if (strpos($access, 'd1') !== false)
        $rights[] = 'Identity ';
    if (strpos($access, 'e1') !== false)
        $rights[] = 'Location ';
}
echo join(', ', $rights);

编辑:根据其他答案中的OP评论,Identity and Location处理。

这样的东西会起作用。

$foo ='';
if (strpos($access,'a1') !== false) $foo .= 'Lists, ';
if (strpos($access,'b1') !== false) $foo .= 'Items, ';
if (strpos($access,'c1') !== false) $foo .= 'Cases, ';
if (strpos($access,'d1') !== false) $foo .= 'Identity, ';
if (strpos($access,'e1') !== false) $foo .= 'Location, ';
$str = rtrim($foo,', ');  //remove last ","
echo preg_replace('/,'s([^,]*$)/', ' and $1', $str);  //replace last ", " with " and "