搜索多个数组值并计算搜索结果

时间:2017-06-15 07:37:29

标签: php arrays multidimensional-array logic

我有一堆来自 $ search $ data 变量的数组数据,如下所示:

$data = array(
    array(1, 2, 3),
    array(1, 2, 3, 4, 7, 13)
);

$search = array(
    array(1, 2),
    array(1, 3),
    array(6, 13),
    array(7, 13)
);

$result = array();

我想要做的是, $ search 中的每一对(例如:1和2)数组数据与 $ data中的所有数据匹配变量它会计算有多少数据匹配(示例:1和2匹配 $ data [0] $ data [1] 所以结果必须是2)。然后根据 $ search 中的键将计数结果保存到变量 $ result

以下是我要找的结果:

$result = array(
    0 => 2,
    1 => 2,
    2 => 0
    3 => 1
);

这是我的代码:

for ($i=0; $i<count($search); $i++) {
    for ($j=0; $j<count($data); $j++) {
        if (count(array_intersect($search[$i], $data[$j])) > 1) {
            array_push($result[$i], "1");
        }
    }
}

正如我上面的实验一样,如果我将计数结果保存到 $ result 变量,它只会给我一个警告:array_push()要求参数1为数组。但是如果我尝试使用array_push将计数结果保存到 $ search 变量,它会给我这样的结果:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 1
            [3] => 1
        )

    [1] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 1
            [3] => 1
        )

    [2] => Array
        (
            [0] => 6
            [1] => 13
        )

    [3] => Array
        (
            [0] => 7
            [1] => 13
            [2] => 1
        )

)

结果接近我想要的结果,但仍然不像我想要的那样。我真的不知道如何做到这一点。

3 个答案:

答案 0 :(得分:3)

foreach ($search as $key => $value) {
    $count = 0;
    if(in_array($value[0], $data[0]) && in_array($value[1], $data[0])){
        $count += 1;
    }
    if(in_array($value[0], $data[1]) && in_array($value[1], $data[1])){
        $count += 1;
    }
    $result[$key] = $count;
}

答案 1 :(得分:2)

您收到错误,因为$result[$i]不是数组,而array_push期望数组作为输入。我让它使用以下代码:

foreach($search as $index => $searchArray) {
    $result[$index] = 0;
    foreach($data as $dataArray) {
        if (count(array_intersect($searchArray, $dataArray)) > 1) {
            $result[$index]++;
        }
    }
}

答案 2 :(得分:0)

您可以像这样计算数组值,

$result = array();
foreach($search as $k => $v){
    $result[$k] = array_count_values($data[0])[$v[0]] + array_count_values($data[1])[$v[1]];

}
print_r($result);