It's good that you're providing more information.
This gives other people a clearer idea of what you are trying to do.
This way, they can spot potential problems with your code, as sometimes an extra set of eyes can do wonders.
On the other hand, providing too much code blurs the issue, both for others and for yourself.
It is often wise to take a step back from your main code, and work on the problematic code, separately.
Once you understand the problem, you can then apply the fix to your main code.
I did a quick search for "in_array" in the code you provided, but the search returned no results.
Yet it is precisely that point that you are trying to investigate.
As such, work only on that part, ignore the rest of your code for the time being.
If you need to, create a stripped down version of your class(es) for testing.
Then you can modify this class to become more like your actual class in some ways, and test.
From these tests you then try to get a better understanding of what actually is happening, not only what you think should happen.
Remember, your fellow programmers dont owe you help in this, after all, you arent paying us a cent.
But if you really need help, and you present your case well, then some of us would be interested in helping you.
It's not a matter of "you win", or "I win". I dont gain anything tangible from helping you.
What I do gain is in increasing my skills in PHP, and the satisfaction of helping someone in need.