In our example you see that only the pair "a" =>
"green" is present in both arrays and thus is returned.
The value "red" is not returned because in
$array1 its key is 0 while
the key of "red" in $array2 is
1, and the key "b" is not returned
because its values are different in each array.

The two values from the key => value pairs are
considered equal only if
(string) $elem1 === (string) $elem2 . In other words
a strict type check is executed so the string representation must be
the same.

It would pay attention to both keys and values even if values would be arrays as well. One important note is that if value of $primary_array is yet another array, its order of key & value pairs becomes important for matching.