/**
* removeDuplicatesMultiDelimiterCI
*
* Case‑insensitive removal of duplicate items using multiple delimiters.
* Uses preg_split to break the string by ANY delimiter, normalizes items
* to lowercase for comparison, but preserves original casing in output.
*
* @param string $s The input string.
* @param array $delimiters List of delimiters, e.g. [",", "|", ";"]
* @return string Cleaned string with duplicates removed,
* rejoined using the FIRST delimiter.
*/
function removeDuplicatesMultiDelimiterCI(string $s, array $delimiters): string
{
// Escape delimiters for safe regex use
$escaped = array_map('preg_quote', $delimiters);
// Build regex: split on ANY delimiter (one or more occurrences)
$pattern = '/[' . implode('', $escaped) . ']+/';
// Split into parts, remove empty entries
$parts = preg_split($pattern, $s, -1, PREG_SPLIT_NO_EMPTY);
$seen = [];
$unique = [];
foreach ($parts as $item) {
// Case‑insensitive key
$key = strtolower($item);
// Only add if not seen before
if (!isset($seen[$key])) {
$seen[$key] = true;
$unique[] = $item; // preserve original casing
}
}
// Reassemble using the FIRST delimiter
return implode($delimiters[0], $unique);
}
// Main
$s = "AAA|aaa,aAA;aaA|AAa,AAA;BBB|CCC,AAA;AAA,aaa|aaa,aaA|aAA";
// Run the function
$result = removeDuplicatesMultiDelimiterCI($s, [",", "|", ";"]);
echo $result;
/*
run:
AAA,BBB,CCC
*/