[关闭]
@a5635268 2016-02-10T20:47:24.000000Z 字数 3296 阅读 1025

Yii框架之助手类

源码分析与使用笔记


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

array助手类

http://www.yiichina.com/doc/guide/2.0/helper-array

获取值

  1. $value = ArrayHelper::getValue($array, 'foo.bar.name'); //foo['bar']['name']
  2. $fullName = ArrayHelper::getValue($user, function ($user, $defaultValue) {
  3. return $user->firstName . ' ' . $user->lastName;
  4. })
  5. //第三参数为默认值,如果没有给定值,则默认为 null
  6. $username = ArrayHelper::getValue($comment, 'user.username', 'Unknown');
  7. //对于获取到值就立即从数组中删除
  8. $array = ['type' => 'A', 'options' => [1, 2]];
  9. $type = ArrayHelper::remove($array, 'type');

检查键名的存在

  1. $data1 = [
  2. 'userName' => 'Alex',
  3. ];
  4. $data2 = [
  5. 'username' => 'Carsten',
  6. ];
  7. // 支持大小写不敏感
  8. if (!ArrayHelper::keyExists('username', $data1, false) || !ArrayHelper::keyExists('username', $data2, false)) {
  9. echo "Please provide username.";
  10. }

检索列

  1. //从多行数据或者多个对象构成的数组中获取某列的值
  2. $data = [
  3. ['id' => '123', 'data' => 'abc'],
  4. ['id' => '345', 'data' => 'def'],
  5. ];
  6. $ids = ArrayHelper::getColumn($array, 'id');
  7. //第二参数可以为回调
  8. $result = ArrayHelper::getColumn($array, function ($element) {
  9. return $element['id'];
  10. });

重建数组索引

  1. $array = [
  2. ['id' => '123', 'data' => 'abc'],
  3. ['id' => '345', 'data' => 'def'],
  4. ];
  5. $result = ArrayHelper::index($array, 'id');
  6. // the result is:
  7. // [
  8. // '123' => ['id' => '123', 'data' => 'abc'],
  9. // '345' => ['id' => '345', 'data' => 'def'],
  10. // ]
  11. // using anonymous function
  12. $result = ArrayHelper::index($array, function ($element) {
  13. return $element['id'];
  14. });

建立哈希表

  1. $array = [
  2. ['id' => '123', 'name' => 'aaa', 'class' => 'x'],
  3. ['id' => '124', 'name' => 'bbb', 'class' => 'x'],
  4. ['id' => '345', 'name' => 'ccc', 'class' => 'y'],
  5. );
  6. $result = ArrayHelper::map($array, 'id', 'name');
  7. // 结果是:
  8. // [
  9. // '123' => 'aaa',
  10. // '124' => 'bbb',
  11. // '345' => 'ccc',
  12. // ]
  13. // 第三参数为分组参数;
  14. $result = ArrayHelper::map($array, 'id', 'name', 'class');
  15. // 结果是:
  16. // [
  17. // 'x' => [
  18. // '123' => 'aaa',
  19. // '124' => 'bbb',
  20. // ],
  21. // 'y' => [
  22. // '345' => 'ccc',
  23. // ],
  24. // ]

多维排序

  1. $data = [
  2. ['age' => 30, 'name' => 'Alexander'],
  3. ['age' => 30, 'name' => 'Brian'],
  4. ['age' => 19, 'name' => 'Barney'],
  5. ];
  6. ArrayHelper::multisort($data, ['age', 'name'], [SORT_ASC, SORT_DESC]);
  7. // 排序之后如下
  8. [
  9. ['age' => 19, 'name' => 'Barney'],
  10. ['age' => 30, 'name' => 'Brian'],
  11. ['age' => 30, 'name' => 'Alexander'],
  12. ];
  13. ArrayHelper::multisort($data, function($item) {
  14. return isset($item['age']) ? ['age', 'name'] : 'name';
  15. });

检测数组类型

  1. // 不指定键名的数组
  2. $indexed = ['Qiang', 'Paul'];
  3. echo ArrayHelper::isIndexed($indexed);
  4. // 所有键名都是字符串
  5. $associative = ['framework' => 'Yii', 'version' => '2.0'];
  6. echo ArrayHelper::isAssociative($associative);

HTML 编码和解码值

为了将字符串数组中的特殊字符做 HTML 编解码

默认情况只会对值做编码。通过给第二个参数传 false ,你也可以对键名做编码。 编码将默认使用应用程序的字符集,你可以通过第三个参数指定该字符集。

合并数组

  1. /**
  2. * 将两个或者多个数组递归式的合并为一个数组。
  3. * 如果每个数组有一个元素的键名相同,
  4. * 那么后面元素的将覆盖前面的元素(不同于 array_merge_recursive)。
  5. * 如果两个数组都有相同键名的数组元素(译者注:嵌套数组)
  6. * 则将引发递归合并。
  7. * 对数值型键名的元素,后面数组中的这些元素会被追加到前面数组中。
  8. * @param array $a 被合并的数组
  9. * @param array $b 合并的数组,你可以在第三、第四个
  10. * 参数中指定另外的合并数组,等等
  11. * @return 合并的结果数组 (原始数组不会被改变)
  12. */
  13. public static function merge($a, $b)

对象转换为数组

  1. $posts = Post::find()->limit(10)->all();
  2. $data = ArrayHelper::toArray($posts, [
  3. 'app\models\Post' => [
  4. 'id',
  5. 'title',
  6. // 键名映射
  7. 'createTime' => 'created_at',
  8. 'length' => function ($post) {
  9. return strlen($post->content);
  10. },
  11. ],
  12. ]);

html

http://www.yiichina.com/doc/guide/2.0/helper-html

url

http://www.yiichina.com/doc/guide/2.0/helper-html

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注