1

我有两个 A 和 B 数组,第一个 (A) 是简单数组,而第二个 (B) 是数组数组。我想找出 A 中的某个元素是否等于 B 中的元素。为此,我目前正在执行嵌套循环,这会导致 n^3 复杂性。我该如何改进这一点。

for ($i = 0; $i <= count($A); $i++) {
    if (isset($A[$i])) {
        foreach ($B as $items) {
            foreach ($items as $item) {
                if ($item['Column1'] == $A[$i]['Column1']) {
                    array_push(A, "result");
                    unset($A[$i]);
                    unset($items);
                    break;
                }
            }
        }
    }
}
4

3 回答 3

2
array_walk_recursive($B, function($val) {
  if (in_array($val, $A)) echo "$val is in the \$A array!";
});
于 2013-07-08T09:11:18.533 回答
1

试试这个,array_seacrh()将删除你的一个 foreach 循环:

for ($i = 0; $i <= count($A); $i++) {
    if (isset($A[$i])) {
        foreach ($B as $items) {
            $t = array_search($A[$i]['Column1'], $items);
            array_push($A, "result");
            unset($A[$i]);
            unset($items[$t]);
        }
    }
}
于 2013-07-08T09:40:47.080 回答
0

创建数组时,您可以创建 $lookup_A 和 $lookup_B 数组,其中键是原始 $A 和 $B 的值

然后你可以在 $lookup_A 上做一个简单的循环并检查 if (isset($lookup_B[$lookup_A_key]))

在你的例子中,我认为 if(isset($A[$i])) 总是正确的

于 2013-07-08T09:10:43.797 回答