public function deleteMulti(array $keys)
{
if (!method_exists($this->client, 'deleteMulti')) {
/*
* HHVM doesn't support deleteMulti, so I'll hack around it by
* setting all items expired.
* I could also delete() all items one by one, but that would
* probably take more network requests (this version always takes 2)
*
* @see http://docs.hhvm.com/manual/en/memcached.deletemulti.php
*/
$values = $this->getMulti($keys);
$keys = array_map(array($this, 'encodeKey'), array_keys($values));
$this->client->setMulti(array_fill_keys($keys, ''), time() - 1);
$return = array();
foreach ($keys as $key) {
$key = $this->decodeKey($key);
$return[$key] = array_key_exists($key, $values);
}
return $return;
}
$keys = array_map(array($this, 'encodeKey'), $keys);
$result = (array) $this->client->deleteMulti($keys);
$keys = array_map(array($this, 'decodeKey'), array_keys($result));
$result = array_combine($keys, $result);
/*
* Contrary to docs (http://php.net/manual/en/memcached.deletemulti.php)
* deleteMulti returns an array of [key => true] (for successfully
* deleted values) and [key => error code] (for failures)
* Pretty good because I want an array of true/false, so I'll just have
* to replace the error codes by falses.
*/
foreach ($result as $key => $status) {
$result[$key] = $status === true;
}
return $result;
}