1st of all, this is my first thread in this section... I hope its the right one since I dont know if it really is an beginners problem? but I assume it is one :) here we go:
I am trying to filter a array thats full of users, kicking out entrys that dont have a matching user_id so I only work with "buddys" out of a buddylist!
im foreach'ing the buddylist array and putting it into a new array because the current buddylist array has another array inside.. I only want the user id's!
then im calling array_filter(), passing it the user table and a callback function that has to check with in_array if the current user's ID is inside of the buddylist array and then removing/keeping the entry depending on the result...
soooo... the problem now is that if I check for any user Id with in_array() it works and finds the id. but if I use it inside of the callback function of array_filter() it tells me the second argument is a wrong datatype ????
heres the working "test" code without array_filter()
Warnung: in_array() [function.in-array]: Wrong datatype for second argument in /www/htdocs/xxxxxxxxx/XXXX.php (Line 316)
I assume I am missing something... some php rule that doesnt let me use in_array() in a callback function??? I dont understand why it isnt working inside of the callback function, even tho I am using the same vars/arrays like in my test script???
this code is all inside the constructor of an object ($engine) I created. I was using $this->buddyList first but replaced it with $engine->buddyList because I got this error
Fatal error: Using $this when not in object context in /xxxxxxxx/XXXXXXX.php on line 316
I guess the whole problem has something to do with the buddylist and the way I have to call it inside the callback function of array_filter()
Normally I would tell you to global $engine and leave it at that, but I think we're only getting a chunk of code from the greater whole here; as suggested by $this I would presume that this is taken from a larger class that you are writing?
The gist of the idea here is that function cmp_ptl_friends() should be a method of your class, and you can call it (other methods from the same class) from array_filter() using the syntax shown above.
Outside of that, if these were code snippets from a procedural script, your problem would have been the fact that cmp_ptl_friends() had no idea who or what $engine was. Since $engine was not created inside the function, nor was it passed as an argument, it doesn't yet exist in the scope of the function. You would have had to either pass it in as an argument or use the global keyword to bring it in from the global scope.
The Following User Says Thank You to delayedinsanity For This Useful Post:
aaaahhh.... ok.... this enlightens me! :)
I didnt know that I could use "array($this,'functionName')" as the callback paramenter / I didnt know at all how to call a function of a class as the callback method...!!! I should have asked this in the first place I guess haha...
I will try this out soon, but it already seems you really know what you are talking about and it WILL WORK! :D