I’m trying to find if a given 2-element array ($result
) exists on a dynamically created multidimentional array.
There are 2 flat arrays ($a
and $b
) which will be used to generate a haystack array of 2-element combinations.
$a = [1, 2, 3];
$b = [3, 4, 5];
$result = [1,3];
I want to check if the $result
array exists (with the two values in either orientation) in the haystack array.
The (cross joined) haystack array ($selections
) looks like the following:
[
[1,3],
[1,4],
[1,5],
[2,3],
[2,4],
[2,5],
[3,4],
[3,5]
]
Notice that [3,3]
is excluded by my application’s logic.
I build $selections
this way:
$selections = [];
foreach($a as $s){
foreach($b as $o){
if($s == $o){
continue;
}
$selections[] = [$s, $o];
}
}
The $result
should be considered found by the following non-exhaustive list:
[1, 3]
[3, 1]
[2, 5]
[3, 3]
But pairs like these should not be considered found:
[1, 2]
[3, 3]
[4, 4]
I tried using array_search
(array_search($result, $selections)
), but it only wwors if the elements are in order.
Of course, I can write a custom function to iterate through the multidimentional array and check the intersection, but I’m checking if there’s a cleaner way to do this.
2
Answers
You don’t have to create every possible combination, it’s quite expensive.
It is better to split the $result array and find each element in the arrays $a and $b.
To allow out of order rule satisfaction, just check both ways explicitly.
Code: (Demo)
If the first pair of
in_array()
calls is satisfied, then the second set will not be executed at all.