2017-06-15 213 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; 
}