public static PhpArray array_unique(Context ctx, PhpArray array, ComparisonMethod sortFlags = ComparisonMethod.String)
{
if (array == null)
{
//PhpException.ArgumentNull("array");
//return null;
throw new ArgumentNullException();
}
IComparer<PhpValue> comparer;
switch (sortFlags)
{
case ComparisonMethod.Regular:
comparer = PhpComparer.Default; break;
case ComparisonMethod.Numeric:
comparer = PhpNumericComparer.Default; break;
case ComparisonMethod.String:
comparer = new PhpStringComparer(ctx); break;
case ComparisonMethod.LocaleString:
//comparer = new PhpLocaleStringComparer(ctx); break;
default:
//PhpException.ArgumentValueNotSupported("sortFlags", (int)sortFlags);
//return null;
throw new ArgumentException(nameof(sortFlags));
}
var result = new PhpArray(array.Count);
var/*!*/identitySet = new HashSet<object>();
// get only unique values - first found
using (var enumerator = array.GetFastEnumerator())
while (enumerator.MoveNext())
{
if (identitySet.Add(enumerator.CurrentValue.GetValue()))
{
result.Add(enumerator.Current);
}
}
//result.InplaceCopyOnReturn = true;
return result;
}