@a5635268
2016-02-10T12:47:24.000000Z
字数 3296
阅读 1260
源码分析与使用笔记
http://www.yiichina.com/doc/guide/2.0/rest-quick-start
这些助手类被编写在命名空间 yii\helpers 下,并且 全是静态类 (就是说它们只包含静态属性和静态方法,而且不能实例化)。
如果想要自定义一个核心助手类 (例如 yii\helpers\ArrayHelper),你应该创建一个新的类继承 helpers对应的基类 (例如 yii\helpers\BaseArrayHelper) 并同样的命 名你的这个类 (例如 yii\helpers\ArrayHelper),包括它的命名空间。这个类 会用来替换框架最初的实现。
http://www.yiichina.com/doc/guide/2.0/helper-overview
http://www.yiichina.com/doc/guide/2.0/helper-array
$value = ArrayHelper::getValue($array, 'foo.bar.name'); //foo['bar']['name']$fullName = ArrayHelper::getValue($user, function ($user, $defaultValue) {return $user->firstName . ' ' . $user->lastName;})//第三参数为默认值,如果没有给定值,则默认为 null$username = ArrayHelper::getValue($comment, 'user.username', 'Unknown');//对于获取到值就立即从数组中删除$array = ['type' => 'A', 'options' => [1, 2]];$type = ArrayHelper::remove($array, 'type');
$data1 = ['userName' => 'Alex',];$data2 = ['username' => 'Carsten',];// 支持大小写不敏感if (!ArrayHelper::keyExists('username', $data1, false) || !ArrayHelper::keyExists('username', $data2, false)) {echo "Please provide username.";}
//从多行数据或者多个对象构成的数组中获取某列的值$data = [['id' => '123', 'data' => 'abc'],['id' => '345', 'data' => 'def'],];$ids = ArrayHelper::getColumn($array, 'id');//第二参数可以为回调$result = ArrayHelper::getColumn($array, function ($element) {return $element['id'];});
$array = [['id' => '123', 'data' => 'abc'],['id' => '345', 'data' => 'def'],];$result = ArrayHelper::index($array, 'id');// the result is:// [// '123' => ['id' => '123', 'data' => 'abc'],// '345' => ['id' => '345', 'data' => 'def'],// ]// using anonymous function$result = ArrayHelper::index($array, function ($element) {return $element['id'];});
$array = [['id' => '123', 'name' => 'aaa', 'class' => 'x'],['id' => '124', 'name' => 'bbb', 'class' => 'x'],['id' => '345', 'name' => 'ccc', 'class' => 'y'],);$result = ArrayHelper::map($array, 'id', 'name');// 结果是:// [// '123' => 'aaa',// '124' => 'bbb',// '345' => 'ccc',// ]// 第三参数为分组参数;$result = ArrayHelper::map($array, 'id', 'name', 'class');// 结果是:// [// 'x' => [// '123' => 'aaa',// '124' => 'bbb',// ],// 'y' => [// '345' => 'ccc',// ],// ]
$data = [['age' => 30, 'name' => 'Alexander'],['age' => 30, 'name' => 'Brian'],['age' => 19, 'name' => 'Barney'],];ArrayHelper::multisort($data, ['age', 'name'], [SORT_ASC, SORT_DESC]);// 排序之后如下[['age' => 19, 'name' => 'Barney'],['age' => 30, 'name' => 'Brian'],['age' => 30, 'name' => 'Alexander'],];ArrayHelper::multisort($data, function($item) {return isset($item['age']) ? ['age', 'name'] : 'name';});
// 不指定键名的数组$indexed = ['Qiang', 'Paul'];echo ArrayHelper::isIndexed($indexed);// 所有键名都是字符串$associative = ['framework' => 'Yii', 'version' => '2.0'];echo ArrayHelper::isAssociative($associative);
为了将字符串数组中的特殊字符做 HTML 编解码
默认情况只会对值做编码。通过给第二个参数传 false ,你也可以对键名做编码。 编码将默认使用应用程序的字符集,你可以通过第三个参数指定该字符集。
/*** 将两个或者多个数组递归式的合并为一个数组。* 如果每个数组有一个元素的键名相同,* 那么后面元素的将覆盖前面的元素(不同于 array_merge_recursive)。* 如果两个数组都有相同键名的数组元素(译者注:嵌套数组)* 则将引发递归合并。* 对数值型键名的元素,后面数组中的这些元素会被追加到前面数组中。* @param array $a 被合并的数组* @param array $b 合并的数组,你可以在第三、第四个* 参数中指定另外的合并数组,等等* @return 合并的结果数组 (原始数组不会被改变)*/public static function merge($a, $b)
$posts = Post::find()->limit(10)->all();$data = ArrayHelper::toArray($posts, ['app\models\Post' => ['id','title',// 键名映射'createTime' => 'created_at','length' => function ($post) {return strlen($post->content);},],]);
http://www.yiichina.com/doc/guide/2.0/helper-html
http://www.yiichina.com/doc/guide/2.0/helper-html
