2017-06-15 139 views
4

我有一堆阵列数据从$搜索$数据变量是这样的:搜索多个数组值和计数的搜索结果

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

我想要做的是,如果每一个对(实施例:1和2)从$搜索匹配与内部$数据变量的所有数据阵列的数据的它将计数多少数据是匹配(实施例:图1和2对$数据[匹配0]$ data [1]所以结果必须是2)。然后将计数结果保存到变量$结果基于密钥$搜索

这是我一直在寻找的结果:

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

正如上面我的实验,如果我保存计数结果$结果变量它只是给了我一个警告:array_push()期望参数1是数组。但是,如果我尝试使用array_push到$搜索变量保存计数结果,它会给我造成这样的:

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 
     ) 

) 

结果是接近我想要的东西,但还是不喜欢我找对于。我真的不知道该怎么做。

+0

结果应该是'$结果=阵列( 0 => 2, 1 => 2, 2 => 1' 3 = > 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]++; 
     } 
    } 
} 
+0

谢谢,它工作得很好,绝不会在我脑海中交叉使用++运算符:| –

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