Я думаю, что Regex будет лучшим решением в этом случае, если вы не рассматривали возможность его использования.
Образец (протестировано):
$a = "5,add|4,edit|6,add|6,edit|19,add|19,delete|19,view";
$result = array();
// match each pair in the input
if (preg_match_all('/(\\d+)\\,(.*?)(\\||$)/m', $a, $matches)){
foreach( $matches[1] as $match_index => $match ){
$result[$match][] = $matches[2][$match_index];
}
}
// loop through the results and print in desired format
foreach( $result as $entry_index => $entry ){
echo "$entry_index have access " . implode( ',', $entry ) . "\n";
}
output:
5 have access add
4 have access edit
6 have access add,edit
19 have access add,delete,view
Использование регулярных выражений упрощает код, а также несколько упрощает изменение формата поддерживаемых входных данных.
Массив $ result заканчивался хеш-картойиспользуя ваши числовые идентификаторы в качестве ключей и массив разрешений (добавление, удаление и т. д.) в качестве значения для каждого ключа.