<?php /** * $item_ids => 商品IDの配列[1,2,3,4,5]の配列 */ foreach($item_ids as $item_id1){ $base = $Redis->lRange('Viewer:Item' . $item_id1, 0, 999); if (count($base) === 0){ continue; } foreach ($item_ids as $item_id2){ if ($item_id1 === $item_id2){ continue; } $target = $Redis->lRange('Viewer:Item:' . $item_id2, 0, 999); if (count($target) === 0){ continue; } #ジャッカード指数を計算 $join = floatval(count(array_unique(array_merge($base, $target)))); $intersect = floatval(count(array_intersect($base, $target))); if ($intersect == 0 || $join == 0){ continue; } $jaccard = $intersect / $join; $redis->zAdd('Jaccard:Item:' . $item_id1, $jaccard, $item_id2); } }
<? /** * $item_id => 商品id * $user_id => ユーザid */ $Redis->lRem('Viewer:Item' . $item_id, $user_id); $Redis->lPush('Viewer:Item' . $item_id, $user_id); $Redis->lTrim('Viewer:Item' . $item_id, 0, 999);
<?php $Redis->zRevRange('Jaccard:Item:' . $item_id, 0, -1);