2014-12-15 2 views
2

Я пытаюсь манипулировать текстовой строкой на основе значений, назначенных пользователю.PHP - вывод строки форматирования

Полная текстовая строка: «Списки, элементы, случаи, идентификация и местоположение», и это показано только в полном объеме против 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 

Может кто-нибудь посоветовать лучший способ для достижения этой

Благодарности

+0

Использование массива, чтобы сохранить список и распечатать его итерация массива, вы можете применить разделитель на основе текущего номера элемента .. –

+0

Вы можете добавить массив со всеми вещами, пользователь может сделать. Например, списки, элементы, случаи, личность, местоположение. В этом массиве также добавить «a1» в качестве ключа или значения. Как хочешь. Прокрутите массив по желаемому пользователю и заполните эти значения в другом массиве. Затем просто используйте взорвать или взорвать (не знаю, какой из них, я всегда забываю это ...) на массиве и буме. У вас есть запятая, если вы хотите сделать «и», сверните по массиву и посмотрите, последний ли он. Если да, добавьте «и» там, еще »,». – Tosfera

ответ

3

использование 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; 
?> 
+0

В основном правильно, но это не распространяется на это: * Списки, элементы и случаи * * –

+0

@SyedQarib Проверьте мой ответ. – vaso123

+0

@SyedQarib, ответ обновлен, проверьте. – Pupil

0

Попробуйте использовать массив и присоединиться:

$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); 

EDIT: на основе ОП комментария в другой ответ, Identity and Location обрабатываются.

0

Что-то вроде этого будет работать.

$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 " 
Смежные вопросы