The array_values is not needed, its already an array. Just set it up as $key=>$value and do not do extra overhead.

Chris Goffinet
[EMAIL PROTECTED]



On Nov 2, 2007, at 10:15 PM, mike wrote:

On 11/2/07, Chris Goffinet <[EMAIL PROTECTED]> wrote:
Yes because doing a hash lookup is much faster than looping +
str_replace. You increase memory but that is the tradeoff.

okay, here's revised. thoughts?

function episode_get($keys) {
       $prefix = 'episodes:';
       list($hits, $misses) = cache_get($prefix, $keys);
       if(count($misses) > 0) {
               if(is_array($misses)) {
                       $misses = implode(',', $misses);
               }
$q = db_query("SELECT * FROM episodes WHERE ID IN($misses)");
               if(db_numrows($q) == 0) {
                       return false;
               } else {
                       while($r = db_rows_assoc($q)) {
                               cache_set($prefix.$r['ID'], $r);
                               $hits[] = $r;
                       }
               }
       }
       return $hits;
}

function cache_get($prefix, $keys) {

       $cache_keys_prefix = array();
       $cache_keys = array();

       if(!isset($GLOBALS['ch'])) {
                cache_open();
       }

       if(!is_array($keys)) {
               $keys = Array($keys);
       }

       foreach(array_values($keys) as $key) {
               $cache_keys_prefix[$prefix.$key] = $prefix.$key;
               $cache_keys[$prefix.$key] = $key;
       }

       $cache_hits = memcache_get($GLOBALS['ch'], $cache_keys_prefix);
       $cache_diffs = array_diff_key($cache_keys, $cache_hits);

       return array($cache_hits, $cache_diffs);
}

function cache_set($key, $value, $flags = 0, $expiry = 2592000) {
       if(!isset($GLOBALS['ch'])) {
                cache_open();
       }
       memcache_set($GLOBALS['ch'], $key, $value, $flags, $expiry);
}

Reply via email to