5

Let's assume I have the following PHP code:

$a = new a();
$a->id = 1;

I then have an array $m of objects of type type a (but they really could be of any type). I want to check if any object in m has property id equal to 1. In Java, I'd do something like:

myList
.stream()
.filter(x <- x.id == a.id)
.count();

In PHP I tried

in_array($a, $m)

but that didn't seem to do work, because obviously even if another object had the same ID it would still be a different object.

I could obviously use a loop, but as really I'd want to check if any object in an array n had a corresponding object with the same ID in m I'd rather avoid a nested loop.

2

1 Answer 1

8

PHP also has an array filtering functioning, which (for obvious reasons) is called array_filter() and does what you want, with anonymous functions.

function findAllWithId($objects, $id) {
    return array_filter($objects, function($toCheck) use ($id) { 
        return $toCheck->id == $id; 
    });
}
Sign up to request clarification or add additional context in comments.

5 Comments

Should you add $objects as a function's parameter?
@A.L Yep, It should be.
there are two syntax errors, missing object in arg and use( $id )
This is what I get for coding after midnight :+ Fixed.
I think it would be a lot clearer whether $toCheck was renamed to $object instead. Also, It seems function is not need here. Anyway, nice answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.