memcahche不像redis那样有ttl命令可以直接查看key的过期时间.不过通过操作开始实现.

1 stats items
该命令输出的结果会类似如下:
STAT items:1:number 66
其中1,就是slab_id, 66表示在slab为1下有key 66个.

2 stats cachedump slab_id count (count表示一次显示几个,0表示全部显示)
该命令会输出结果每行会类似如下:
ITEM abc [100 b; 1528336485 s]
其中键名abc, 占用100byte, 过期时间1528336485(unix时间戳形式)

有时我们想这样访问数组$a的元素$varStr = "$a['a']['a_a']";.今天就做罗列下实现的两大类方法:
1.使用eval()

$varStr = "\$vars['a']['a_a']";
$value = eval("return $varStr;");

2.一层层遍历取值

$vars = function($str) use ($vars)
{
    if (!preg_match_all('#\[[\"\'](.+?)[\"\']\]#', $str, $keys)) {
        return null;
    }
    $var = $vars;
    foreach($keys[1] as $key){
        $var = $var[$key];
    }
    return $var;
};
$vars("['a']['aa']");//用法

#为了简洁,我们可以给他封装成一个函数
function initVar(&$vars)
{
    $vars = function($str) use ($vars)
    {
        if (!preg_match_all('#\[[\"\'](.+?)[\"\']\]#', $str, $keys)) {
            return null;
        }
        $var = $vars;
        foreach($keys[1] as $key) {
            $var = $var[$key];
        }
        return $var;
    };
}
//然后这样使用
initVar($vars);
$vars('["a"]["aa"]');

//或者封装成这样
function getValue($vars, $str)
{
    if (!preg_match_all('#\[[\"\'](.+?)[\"\']\]#', $str, $keys)) {
        return null;
    }
    $var = $vars;
    foreach ($keys[1] as $key) {
        $var = $var[$key];
    }
    return $var;
}
//然后这样使用
get($vars, '["a"]["aa"]');

参考:https://stackoverflow.com/questions/7003559/use-strings-to-access-potentially-large-multidimensional-arrays

php中处理xml格式的数据,一般都会用DOMDocument类.不过使用中发现往格式化的xml文件新增元素时新增元素没有被格式化(即有缩进换行). 解决办法也很简单,即是导入xml时,不要保留空白符.例子如下:

<?php
$doc = new \DOMDocument();
$doc->formatOutput = true;
$doc->preserveWhiteSpace = false;//这是关键
$doc->loadXML($xmlStr);
$doc->appendChild($doc->createElement('php', '666'))
$formattedXMLStr = $doc->saveXML();//格式化好的XML
echo $formattedXMlStr;
?>

用mac大家应该都会这样的体会.蓝牙耳机经常要和mac与手机间切换连接.当比不用mac时关上盖子后,想使用手机连蓝牙发现,连不上.因为蓝牙耳机一直和mac连接着. 要是可以关上mac盖子时,自动关闭蓝牙,打开自动开启,那就完美了.本身mac菜单没有这样,需要我们借助其他的工具,以下为教程.

1.直接使用开发好的软件.Bluesnooze
2.使用blueutilSleepWatcher工具实现