Using the debugging tools:
- 1 in [0, 11, 20] => true, yet 1 is not in the array
- contains_any([0, 11, 20], 1) => true
Currently when looking for multiple namespaces (for example), it seems the only way to do it with a single condition is with regex, like article_namespace in "^(0|11|20)$". This is not very pretty, and probably (very very slightly) less performant because it uses the regex engine.
Arrays always get joined into a single string, which is not what you would expect from the syntax.
It should be noted fixing this will introduce regressions. There are many, many filters that do things like !("confirmed" in user_groups). Right now this covers "confirmed" and "autoconfirmed". Assuming user_groups is an array (which it logically it should be), you'd need to change this clause to something like !(contains_any(user_groups, "confirmed", "autoconfirmed")). We could run a query to find all the filters that use in, contains_any and contains in order to find out what needs updating. The rollout process would be painful, but the point is newcomers to the extension would expect arrays to act like arrays, and not a giant string.