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

Posted

技术标签:

【中文标题】搜索多个数组值并统计搜索结果【英文标题】:Search multiple array value and count the search result 【发布时间】:2017-11-17 14:12:05 【问题描述】:

我有一堆来自 $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 中的每一对 (EXAMPLE: 1 and 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
        )

)

结果接近我想要的,但仍然不像我想要的那样。我真的不知道该怎么做。

【问题讨论】:

结果应该是$result = array( 0 =&gt; 2, 1 =&gt; 2, 2 =&gt; 1' 3 =&gt; 1 ); 【参考方案1】:
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;

【讨论】:

【参考方案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]++;
        
    

【讨论】:

谢谢,它工作得很好,我从来没有想过它必须使用++运算符:|【参考方案3】:

你可以这样计算数组值,

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

【讨论】:

以上是关于搜索多个数组值并统计搜索结果的主要内容,如果未能解决你的问题,请参考以下文章

在php数组中搜索值并获取所有键

text 从项数组中搜索字符串值并返回匹配的数组项。

ActionScript 3 AS3在数组中搜索值并返回其位置索引

AS3在数组中搜索一个值并返回它的位置索引

Pandas str.contains - 在字符串中搜索多个值并在新列中打印值[重复]

来自输入的角度搜索数组值