I want to compare the values of two flat, indexed arrays and generate a new array where the keys are the original values from the first array and the values are boolean values indicating whether the same value occurred in both origibal arrays.
$array1 = [
"car1",
"car2",
"car3",
"car4",
"car5"
];
$array2 = [
"car1",
"car4",
"car5"
}
I tried to compare the arrays with the array_diff() function but it gave me elements values instead of boolean values.
I want to compare each value from the two arrays and generate an “array map” or maybe using the array_combine() function to get array like this:
[
"car1" => true,
"car2" => false,
"car3" => false
"car4" => true,
"car5" => true,
]
Advertisement
Answer
Arrays are fun!
PHP has a TON of array functions, and so there’s lots of potential solutions.
I came up with this one as a personal challenge, which uses no loops, filters, or maps.
This solution uses array_intersect to find values that exist in both arrays, then array_values along with array_fill_keys to turn them into associative arrays populated with TRUE or FALSE, and finally array_merge to put them together into a single array:
$array1 = array( 0 => "car1", 1 => "car2", 2 => "car3", 3 => "car4", 4 => "car5"); $array2 = array( 0 => "car1", 1 => "car4", 2 => "car5" ); // Find all values that exist in both arrays $intersect = array_intersect( $array1, $array2 ); // Turn it into an associative array with TRUE values $intersect = array_fill_keys( array_values($intersect), TRUE ); // Turn the original array into an associative array with FALSE values $array1 = array_fill_keys( array_values( $array1 ), FALSE ); // Merge / combine the arrays - $intersect MUST be second so that TRUE values override FALSE values $results = array_merge( $array1, $intersect );
var_dump( $results ); results in:
array (size=5) 'car1' => boolean true 'car2' => boolean false 'car3' => boolean false 'car4' => boolean true 'car5' => boolean true