如果数组存在,如何交叉数组

时间:2018-04-06 14:02:47

标签: php ajax

我需要为ajax自动完成选择输入创建三个数组的交集,所以有时一个或多个数组为空,array_intersect函数返回错误: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']);

有没有办法在没有编写大量脏条件的情况下进行交叉以避免错误?

2 个答案:

答案 0 :(得分:1)

使用函数isset检查并使用is_array进行测试,该对象是一个数组。

例如这个

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']);
}
....

答案 1 :(得分:0)

我使用堆叠的三元运算符来解决我的问题,但我仍然采用更优雅的方式来实现这一目标

$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)))))));