php Jaccard

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