检查2个数组foreach值的更有效方法

时间:2016-09-14 21:29:10

标签: php arrays

是否有更有效的方法来预先检查数组中是否存在针对多个数组的类似值? 这是我的代码:

foreach ($city as $option) {
    if (in_array($option, $optionarray1)) {
        $tables[] = 'newvalue1';
    } else if (in_array($option, $optionarray2)) {
        $tables[] = 'newvalue2';
    } else if (in_array($option, $optionarray3)) {
        $tables[] = 'newvalue3';
    }
 }

1 个答案:

答案 0 :(得分:1)

使用array_flip()将每个$optionarrayX转换为关联数组,这样您就不必每次都进行线性搜索。

$optionhash1 = array_flip($optionarray1);
$optionhash2 = array_flip($optionarray2);
$optionhash3 = array_flip($optionarray3);

然后你可以将这些全部放在一个数组中,这样就可以使用嵌套循环而不是重复代码。

$optionhashes = array(1=>$optionhash1, 2=>$optionhash2, 3=>$optionhash3);

foreach ($city as $option) {
    foreach ($optionhashes as $i => $hash) {
        if (array_key_exists($option, $hash)) {
            $tables[]= 'newvalue' . $i;
            break;
        }
    }
}