У меня есть эти таблицы. В первой таблице у меня есть идентификатор транзакции и продукты, купленные в этой транзакции.
TID Products 1 1,2,5 2 2,4 3 2,3 4 1,2,4 5 1,3 6 2,3 7 1,3 8 1,2,3,5 9 1,2,3
То, что я хочу сделать с этими данными, – это подсчет количества раз, когда набор элементов встречается в столбце «Продукты». Например, набор элементов {1,2} найден 4 раза в столбце «Продукты», там нет проблем, но 1,3 только найдено 2 раза, но, как видно в столбце «Продукты», он появляется 4 раза.
ItemSet Sup. count 1,2 4 1,3 2 1,4 0 1,5 0 2,3 4 2,4 2 2,5 1 3,4 0 3,5 1 4,5 0
Это php-код, который я использовал для поиска совпадений в Sup. счетчик. если я найду все совпадения в наборе предметов, когда я получу два цифры, например 12 или более, он скажет, что он нашел 1 и 2 снова, поэтому я поместил границу. Поэтому я застрял в этом месте.
$result_support = array_fill ( 0 , $count_itemsets , 0 ); $count_result_array = count($result_array); for($i = 0; $i < $count_itemsets; $i++){ for($j = 0; $j < $count_result_array; $j++){ $string = $result_array[$j]; if (preg_match('~\\b' . $result_itemset[$i] . '\\b~i', $string, $m)) { $result_support[$i] = $result_support[$i] + 1; } } }
$array1 = array( 1=> '1,2,5', 2 => '2,4', 3=> '2,3', 4 => '1,2,4', 5 => '1,3', 6=> '2,3', 7 => '1,3', 8 => '1,2,3,5', 9 => '1,2,3'); $produCt =array(); foreach ($array1 as $index =>$val){ $arra = explode(',', $val); if(count($arra)>2){ for($i=0;$i<count($arra);$i++){ for($j=$i+1;$j<count($arra);$j++){ $produCt[] = $arra[$i].",".$arra[$j]; } } }else{ $produCt[] =$val; } } $prdtCount =array_count_values($produCt); var_dump($prdtCount);
Я предполагаю, что ваш необходимый результат
array (size=8) '1,2' => int 4 '1,5' => int 2 '2,5' => int 2 '2,4' => int 2 '2,3' => int 4 '1,4' => int 1 '1,3' => int 4 '3,5' => int 1