月度归档:2019年02月

YII2 数据缓存的使用

$data = $cache->get($key);

if ($data === false) {

    // $data 在缓存中没有找到,则重新计算它的值
    // 将 $data 存放到缓存供下次使用
    $cache->set($key, $data);
}



从 2.0.11 版本开始, 缓存组件 提供了 getOrSet() 方法来简化数据的取回、计算和存储。 下面的代码逻辑和上一个例子是完全一样的:

$data = $cache->getOrSet($key, function () {
    return $this->calculateSomething();
});
当缓存中有关联 $key 的数据时,将返回这个缓存的值。 否则就执行匿名函数来计算出将要缓存的数据并返回它。
如果匿名函数需要作用域外的数据时,可以使用 use 语句把这些数据传递到匿名函数中。 例如:

$user_id = 42;
$data = $cache->getOrSet($key, function () use ($user_id) {
    return $this->calculateSomething($user_id);
});
0

YII2 ArrayHelper常用方法

$data = [
            ['age' => 30, 'name' => 'Alexander'],
            ['age' => 30, 'name' => 'Brian'],
            ['age' => 19, 'name' => 'Barney'],
        ];
        /**
         * 多维排序
         */
        ArrayHelper::multisort($data, ['age', 'name'], [SORT_ASC, SORT_DESC]);

        /**
         * 测试阵列
         */
        var_dump(ArrayHelper::isIn('a', ['a']));
        var_dump(ArrayHelper::isIn('a', ['a']));
        var_dump(ArrayHelper::isSubset(['a', 'c'], ['a', 'b', 'c']));

        $posts = Sample::find()->all();
        $arr = ArrayHelper::toArray($posts,[
            'common\models\Sample'=>[
                'c1',
                'c2'=>'c3',
            ]
        ]);

        var_dump($arr);


        $array = [
            ['id' => '123', 'name' => 'aaa', 'class' => 'x'],
            ['id' => '123', 'name' => 'bbb', 'class' => 'x'],
            ['id' => '345', 'name' => 'ccc', 'class' => 'y'],
        ];

        $result1 = ArrayHelper::map($array, 'id', 'name');
        $result2 = ArrayHelper::map($array, 'id', 'name', 'class');
        var_dump($result1);
        var_dump($result2);


        $r1 = ArrayHelper::index($array,'id');
        //以ID为索引,相同的ID后面将覆盖前面的
        print_r($r1);

        $r2 = ArrayHelper::index($array,null,'id');
        print_r($r2);
        //以ID为索引相同的ID不会被覆盖,而是合并成一个数组

        $r3 = ArrayHelper::index($array,'class',[function($ele){
            return $ele['id'];
        },'name']);

        //以三级分组索引 id -> name -> class

        print_r($r3);
0