0

I need to make an intersection of three arrays for an ajax autocompletion select input, so sometimes one or more array are empty and array_intersect function returns me an error : array_intersect(): Argument #1 is not an array

$output['Family'] = array_intersect($temp['VernNamesSelected']['Family'], $temp['GenusSelected']['Family'], $temp['SpeciesSelected']['Family']);
$output['Genus'] = array_intersect($temp['VernNamesSelected']['Genus'], $temp['FamiliesSelected']['Genus'], $temp['SpeciesSelected']['Genus']);
$output['Species'] = array_intersect($temp['VernNamesSelected']['Species'], $temp['FamiliesSelected']['Species'], $temp['GenusSelected']['Species']);

Is there a way to do an intersection without writing a lot of dirty conditions to avoid the errors ?

2 Answers 2

1

Check with the function isset and test with is_array wether the object is an array.

For example this

if(isset($temp['VernNamesSelected']['Family']) && is_array($temp['VernNamesSelected']['Family']) && isset($temp['GenusSelected']['Family']) && is_array($temp['GenusSelected']['Family']) && isset($temp['SpeciesSelected']['Family']) && is_array($temp['SpeciesSelected']['Family'])) {
    $output['Family'] = array_intersect($temp['VernNamesSelected']['Family'], $temp['GenusSelected']['Family'], $temp['SpeciesSelected']['Family']);
}
....
Sign up to request clarification or add additional context in comments.

Comments

0

I used stacked ternary operators to solve my issue, but i'm still opened to a more elegant way of doing this

$output['Family'] = (isset($temp['VernNamesSelected']['Family']) && isset($temp['GenusSelected']['Family']) && isset($temp['SpeciesSelected']['Family']) ? array_intersect($temp['VernNamesSelected']['Family'],$temp['GenusSelected']['Family'],$temp['SpeciesSelected']['Family']) :
    (isset($temp['VernNamesSelected']['Family']) && isset($temp['GenusSelected']['Family']) && !isset($temp['SpeciesSelected']['Family']) ? array_intersect($temp['VernNamesSelected']['Family'],$temp['GenusSelected']['Family']) :
    (isset($temp['VernNamesSelected']['Family']) && !isset($temp['GenusSelected']['Family']) && isset($temp['SpeciesSelected']['Family']) ? array_intersect($temp['VernNamesSelected']['Family'],$temp['SpeciesSelected']['Family']) :
    (!isset($temp['VernNamesSelected']['Family']) && isset($temp['GenusSelected']['Family']) && isset($temp['SpeciesSelected']['Family']) ? array_intersect($temp['GenusSelected']['Family'],$temp['SpeciesSelected']['Family']) :
    (isset($temp['VernNamesSelected']['Family']) && !isset($temp['GenusSelected']['Family']) && !isset($temp['SpeciesSelected']['Family']) ? $temp['VernNamesSelected']['Family'] :
    (!isset($temp['VernNamesSelected']['Family']) && isset($temp['GenusSelected']['Family']) && !isset($temp['SpeciesSelected']['Family']) ? $temp['GenusSelected']['Family'] :
    (!isset($temp['VernNamesSelected']['Family']) && !isset($temp['GenusSelected']['Family']) && isset($temp['SpeciesSelected']['Family']) ? $temp['SpeciesSelected']['Family'] :
    NULL)))))));

$output['Genus'] = (isset($temp['VernNamesSelected']['Genus']) && isset($temp['GenusSelected']['Genus']) && isset($temp['SpeciesSelected']['Genus']) ? array_intersect($temp['VernNamesSelected']['Genus'],$temp['GenusSelected']['Genus'],$temp['SpeciesSelected']['Genus']) :
        (isset($temp['VernNamesSelected']['Genus']) && isset($temp['GenusSelected']['Genus']) && !isset($temp['SpeciesSelected']['Genus']) ? array_intersect($temp['VernNamesSelected']['Genus'],$temp['GenusSelected']['Genus']) :
        (isset($temp['VernNamesSelected']['Genus']) && !isset($temp['GenusSelected']['Genus']) && isset($temp['SpeciesSelected']['Genus']) ? array_intersect($temp['VernNamesSelected']['Genus'],$temp['SpeciesSelected']['Genus']) :
        (!isset($temp['VernNamesSelected']['Genus']) && isset($temp['GenusSelected']['Genus']) && isset($temp['SpeciesSelected']['Genus']) ? array_intersect($temp['GenusSelected']['Genus'],$temp['SpeciesSelected']['Genus']) :
        (isset($temp['VernNamesSelected']['Genus']) && !isset($temp['GenusSelected']['Genus']) && !isset($temp['SpeciesSelected']['Genus']) ? $temp['VernNamesSelected']['Genus'] :
        (!isset($temp['VernNamesSelected']['Genus']) && isset($temp['GenusSelected']['Genus']) && !isset($temp['SpeciesSelected']['Genus']) ? $temp['GenusSelected']['Genus'] :
        (!isset($temp['VernNamesSelected']['Genus']) && !isset($temp['GenusSelected']['Genus']) && isset($temp['SpeciesSelected']['Genus']) ? $temp['SpeciesSelected']['Genus'] :
        NULL)))))));

$output['Species'] = (isset($temp['VernNamesSelected']['Species']) && isset($temp['GenusSelected']['Species']) && isset($temp['SpeciesSelected']['Species']) ? array_intersect($temp['VernNamesSelected']['Species'],$temp['GenusSelected']['Species'],$temp['SpeciesSelected']['Species']) :
        (isset($temp['VernNamesSelected']['Species']) && isset($temp['GenusSelected']['Species']) && !isset($temp['SpeciesSelected']['Species']) ? array_intersect($temp['VernNamesSelected']['Species'],$temp['GenusSelected']['Species']) :
        (isset($temp['VernNamesSelected']['Species']) && !isset($temp['GenusSelected']['Species']) && isset($temp['SpeciesSelected']['Species']) ? array_intersect($temp['VernNamesSelected']['Species'],$temp['SpeciesSelected']['Species']) :
        (!isset($temp['VernNamesSelected']['Species']) && isset($temp['GenusSelected']['Species']) && isset($temp['SpeciesSelected']['Species']) ? array_intersect($temp['GenusSelected']['Species'],$temp['SpeciesSelected']['Species']) :
        (isset($temp['VernNamesSelected']['Species']) && !isset($temp['GenusSelected']['Species']) && !isset($temp['SpeciesSelected']['Species']) ? $temp['VernNamesSelected']['Species'] :
        (!isset($temp['VernNamesSelected']['Species']) && isset($temp['GenusSelected']['Species']) && !isset($temp['SpeciesSelected']['Species']) ? $temp['GenusSelected']['Species'] :
        (!isset($temp['VernNamesSelected']['Species']) && !isset($temp['GenusSelected']['Species']) && isset($temp['SpeciesSelected']['Species']) ? $temp['SpeciesSelected']['Species'] :
        NULL)))))));

Comments

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.