复杂的PHP数组搜索

时间:2018-06-14 17:02:42

标签: php arrays

我有以下数组结构,主数据包含数千条记录。

Array
   (
        [0] => 0,1
        [1] => 0,0
        [2] => 0,2
        [3] => 0,3
        [4] => 10,2
    )

我有一个较小子集的第二个数组。如

Array
   (
        [0] => 0,1
        [1] => 0,0
    )

我想在第一个数组中找到第二个数组中第二个数组中存在的元素的相同顺序。但是,我想从第一个数组中找到关键(或键),而不是做一个交叉。我一直在破坏我的大脑...

更新:

钥匙是独一无二的。到目前为止,在上面的数组中我希望看到输出:

在array1中找到的Array2(从键0开始)。

第二个例子:

  Array
   (
        [a] => 0,1
        [b] => 0,0
        [c] => 0,2
        [d] => 0,3
        [e] => 10,2
    )

第二个数组

Array
   (
         [1] => 0,3
         [2] => 10,2

    )

预期产出:

数组A中的第二个数组匹配,从数组A的键d开始。

希望能够清除它。

3 个答案:

答案 0 :(得分:0)

我不明白array_intersect有什么问题 当你描述你的预期输出时,似乎array_intersect是完美的。

$a = Array
(
    15 => "0,1",
    16 => "0,0",
    2 => "0,2",
    3 => "0,3",
    4 => "10,2"
);

$b = Array
(
    0 => "0,1",
    1 => "0,0"
);

Var_dump(array_intersect($a, $b));

输出:

array(2) {
  [15]=>  string(3) "0,1"
  [16]=>  string(3) "0,0"
}

https://3v4l.org/KG1v6

或者,如果MonkeyZeus是正确的,也许这对你有用吗? 我匹配array_intersect,然后确保键是相同的。

$intersect = array_intersect($a, $b);
$keys = array_keys($intersect);

If($keys == array_keys($b)){
    Echo "they match";
}else{
    Echo "don't match";
}

https://3v4l.org/iiNmd

OP编辑后,似乎需要一个简单的array_intersect。

https://3v4l.org/gIb10

$intersect =  array_intersect($a, $b);
Var_dump($intersect);
Echo "matching keys is: " . Implode(", ", array_keys($intersect));

答案 1 :(得分:0)

获得匹配密钥的最佳解决方案是

$result_array = array_intersect_assoc($array1, $array2);
$result_array_keys = array_keys(array_intersect_assoc($array1, $array2));
print_r($result_array);
print_r($result_array_keys); // this gives matching keys array

答案 2 :(得分:0)

以上解决方案均未发布。帮助我的是重新构建数组并从此处回答:Find array in array, in sequence