## think-helper 常用的一些擴展類庫
> 以下類庫都在`\\think\\helper`命名空間下
*****
## 數組 & 對象
要使用數組類,首先需要在你的類文件中引入
~~~
use think\helper\Arr;
~~~
*****
#### `Arr::add($array, $key, $value)`
如果給定的鍵在數組中不存在或數組被設置為`null`,那么?`Arr::add`?函數將會把給定的鍵值對添加到數組中:
```
use think\helper\Arr;
$array = Arr::add(['name' => 'Desk'], 'price', 100);
// ['name' => 'Desk', 'price' => 100]
$array = Arr::add(['name' => 'Desk', 'price' => null], 'price', 100);
// ['name' => 'Desk', 'price' => 100]
```
*****
#### `Arr::collapse($array)`
函數將多個數組合并為一個數組
```
use think\helper\Arr;
$array = Arr::collapse([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
```
*****
#### `Arr::divide($array)`
函數返回一個二維數組,一個值包含原始數組的鍵,另一個值包含原始數組的值:
```
use think\helper\Arr;
[$keys, $values] = Arr::divide(['name' => 'Desk']);
// $keys: ['name']
// $values: ['Desk']
```
*****
#### `Arr::dot($array, $prepend = '')`
函數將多維數組中所有的鍵平鋪到一維數組中,新數組使用「.」符號表示層級包含關系:
```
use think\helper\Arr;
$array = ['products' => ['desk' => ['price' => 100]]];
$flattened = Arr::dot($array);
// ['products.desk.price' => 100]
```
*****
#### `Arr::except($array, $keys)`
函數從數組中刪除指定的鍵值對:
```
use think\helper\Arr;
$array = ['name' => 'Desk', 'price' => 100];
$filtered = Arr::except($array, ['price']);
// ['name' => 'Desk']
```
*****
#### `Arr::first($array, callable $callback = null, $default = null)`
函數返回數組中通過真值測試的第一個元素:
```
use think\helper\Arr;
$array = [100, 200, 300];
$first = Arr::first($array, function ($value, $key) {
return $value >= 150;
});
// 200
```
*****
#### `Arr::forget(&$array, $keys)`
函數使用「.」符號從深度嵌套的數組中刪除給定的鍵值對:
```
use think\helper\Arr;
$array = ['products' => ['desk' => ['price' => 100]]];
Arr::forget($array, 'products.desk');
// ['products' => []]
```
*****
#### `Arr::get($array, $key, $default = null)`
函數使用「.」符號從深度嵌套的數組中根據指定鍵檢索值:
```
use think\helper\Arr;
$array = ['products' => ['desk' => ['price' => 100]]];
$price = Arr::get($array, 'products.desk.price');
// 100
```
*****
#### `Arr::has($array, $keys)`
函數使用「.」符號查找數組中是否存在指定的一個或多個鍵:
```
use think\helper\Arr;
$array = ['product' => ['name' => 'Desk', 'price' => 100]];
$contains = Arr::has($array, 'product.name');
// 真
$contains = Arr::has($array, ['product.price', 'product.discount']);
// 假
```
*****
#### `Arr::last($array, callable $callback = null, $default = null)`
函數返回數組中通過指定測試的最后一個元素:
```
use think\helper\Arr;
$array = [100, 200, 300, 110];
$last = Arr::last($array, function ($value, $key) {
return $value >= 150;
});
// 300
```
*****
#### `Arr::only($array, $keys)`
函數只返回給定數組中指定的鍵值對:
```
use think\helper\Arr;
$array = ['name' => 'Desk', 'price' => 100, 'orders' => 10];
$slice = Arr::only($array, ['name', 'price']);
// ['name' => 'Desk', 'price' => 100]
```
*****
#### `Arr::pluck($array, $value, $key = null)`
函數從數組中檢索給定鍵的所有值:
```
use think\helper\Arr;
$array = [
['developer' => ['id' => 1, 'name' => 'Taylor']],
['developer' => ['id' => 2, 'name' => 'Abigail']],
];
$names = Arr::pluck($array, 'developer.name');
// ['Taylor', 'Abigail']
```
*****
#### `Arr::prepend($array, $value, $key = null)`
函數將一個值插入到數組的開始位置:
```
use think\helper\Arr;
$array = ['one', 'two', 'three', 'four'];
$array = Arr::prepend($array, 'zero');
// ['zero', 'one', 'two', 'three', 'four']
```
如果需要,你可以指定你插入值的鍵:
```
use think\helper\Arr;
$array = ['price' => 100];
$array = Arr::prepend($array, 'Desk', 'name');
// ['name' => 'Desk', 'price' => 100]
```
*****
#### `Arr::pull(&$array, $key, $default = null)`
函數從數組中返回指定鍵的值并刪除此鍵/值對:
```
use think\helper\Arr;
$array = ['name' => 'Desk', 'price' => 100];
$name = Arr::pull($array, 'name');
// $name: Desk
// $array: ['price' => 100]
```
*****
#### `Arr::random($array, $number = null)`
函數從數組中隨機返回一個值:
```
use think\helper\Arr;
$array = [1, 2, 3, 4, 5];
$random = Arr::random($array);
// 4 - (隨機檢索)
```
*****
#### `Arr::set(&$array, $key, $value)`
函數使用「.」符號在多維數組中設置指定鍵的值:
```
use think\helper\Arr;
$array = ['products' => ['desk' => ['price' => 100]]];
Arr::set($array, 'products.desk.price', 200);
// ['products' => ['desk' => ['price' => 200]]]
```
*****
#### `Arr::sort($array, $callback = null)`
函數根據數組的值對數組進行排序:
```
use think\helper\Arr;
$array = ['Desk', 'Table', 'Chair'];
$sorted = Arr::sort($array);
// ['Chair', 'Desk', 'Table']
```
你也可以根據給定閉包返回的結果對數組進行排序:
```
use think\helper\Arr;
$array = [
['name' => 'Desk'],
['name' => 'Table'],
['name' => 'Chair'],
];
$sorted = array_values(Arr::sort($array, function ($value) {
return $value['name'];
}));
/*
[
['name' => 'Chair'],
['name' => 'Desk'],
['name' => 'Table'],
]
*/
```
*****
#### `Arr::sortRecursive($array)`
函數使用?`sort`?函數對數值子數組進行遞歸排序,使用`ksort`函數對關聯子數組進行遞歸排序:
```
use think\helper\Arr;
$array = [
['Roman', 'Taylor', 'Li'],
['PHP', 'Ruby', 'JavaScript'],
['one' => 1, 'two' => 2, 'three' => 3],
];
$sorted = Arr::sortRecursive($array);
/*
[
['JavaScript', 'PHP', 'Ruby'],
['one' => 1, 'three' => 3, 'two' => 2],
['Li', 'Roman', 'Taylor'],
]
*/
```
*****
#### `Arr::where($array, callable $callback)`
函數使用給定閉包返回的結果過濾數組:
```
use think\helper\Arr;
$array = [100, '200', 300, '400', 500];
$filtered = Arr::where($array, function ($value, $key) {
return is_string($value);
});
// [1 => '200', 3 => '400']
```
*****
#### `Arr::wrap($value)`
函數將給定的值變為一個數組,如果給定的值已經是數組,則不改變:
```
use think\helper\Arr;
$string = 'Laravel';
$array = Arr::wrap($string);
// ['Laravel']
```
*****
#### `data_fill(&$target, $key, $value)`
函數使用「.」符號在多維數組或對象內設置缺省值:
```
$data = ['products' => ['desk' => ['price' => 100]]];
data_fill($data, 'products.desk.price', 200);
// ['products' => ['desk' => ['price' => 100]]]
data_fill($data, 'products.desk.discount', 10);
// ['products' => ['desk' => ['price' => 100, 'discount' => 10]]]
```
這個函數還接受星號「*」作為通配符,相應的填充目標:
```
$data = [
'products' => [
['name' => 'Desk 1', 'price' => 100],
['name' => 'Desk 2'],
],
];
data_fill($data, 'products.*.price', 200);
/*
[
'products' => [
['name' => 'Desk 1', 'price' => 100],
['name' => 'Desk 2', 'price' => 200],
],
]
*/
```
*****
#### `data_get($target, $key, $default = null)`
函數使用「.」符號從多維數組或對象中檢索值
```
$data = ['products' => ['desk' => ['price' => 100]]];
$price = data_get($data, 'products.desk.price');
// 100
```
這個函數還接受「*」作為通配符,它可以匹配數組或對象的任何鍵:
```
$data = [
'product-one' => ['name' => 'Desk 1', 'price' => 100],
'product-two' => ['name' => 'Desk 2', 'price' => 150],
];
data_get($data, '*.name');
// ['Desk 1', 'Desk 2'];
```
*****
#### `data_set(&$target, $key, $value, $overwrite = true)`
函數使用「.」符號在多維數組或對象中設置一個值:
```
$data = ['products' => ['desk' => ['price' => 100]]];
data_set($data, 'products.desk.price', 200);
// ['products' => ['desk' => ['price' => 200]]]
```
該函數也可以接收「*」通配符,相應的在指定鍵上設置值:
```
$data = [
'products' => [
['name' => 'Desk 1', 'price' => 100],
['name' => 'Desk 2', 'price' => 150],
],
];
data_set($data, 'products.*.price', 200);
/*
[
'products' => [
['name' => 'Desk 1', 'price' => 200],
['name' => 'Desk 2', 'price' => 200],
],
]
*/
```
*****
#### `class_basename($class)`
函數返回被刪除了命名空間的指定類的類名:
```
$class = class_basename('Foo\Bar\Baz');
// Baz
```
*****
#### `class_uses_recursive($class)`
函數返回一個類使用的所有 traits , 包括它所有父類使用的 traits:
```
$traits = class_uses_recursive(App\User::class);
```
*****
#### `trait_uses_recursive($trait)`
返回被 trait 使用的全部 trait:
```
$traits = trait_uses_recursive(\Illuminate\Notifications\Notifiable::class);
```
*****
#### `collect($value = null)`
函數根據給定的值創建一個collection實例:
```
$collection = collect(['taylor', 'abigail']);
```
*****
#### `value($value)`
函數返回給定值。如果傳遞`閉包`給此函數,將執行`閉包`并返回閉包調用的結果:
```
$result = value(true);
// 真
$result = value(function () {
return false;
});
// 假
```
#### `tap($value, $callback = null)`
函數接受兩個參數: 任意`$value`和閉包。`$value`將被傳遞給閉包,并被`tap`函數返回。與閉包的返回值無關:
```
$user = tap(User::first(), function ($user) {
$user->name = 'taylor';
$user->save();
});
```
如果沒有向 tap 函數傳遞閉包,可以調用給定 $value 的任意方法。調用此方法的返回值永遠是 $value,無論方法在其定義中返回什么。例如,Eloquent update 方法指定返回一個整數。但是,我們可以通過 tap 函數鏈式調用 update 方法強制其返回模型自身:
```
$user = tap($user)->update([
'name' => $name,
'email' => $email,
]);
```
*****
#### `throw_unless()`
在給定的布爾表達式結果為`false`時,`throw_unless`函數拋出給定的異常:
```
throw_unless(Auth::user()->isAdmin(), AuthorizationException::class);
throw_unless(
Auth::user()->isAdmin(),
AuthorizationException::class,
'You are not allowed to access this page'
);
```
*****
#### `throw_if()`
在給定的布爾表達式結果為`true`時,`throw_if`函數拋出給定的異常:
```
throw_if(! Auth::user()->isAdmin(), AuthorizationException::class);
throw_if(
! Auth::user()->isAdmin(),
AuthorizationException::class,
'You are not allowed to access this page'
);
```
*****
## 字符串
要使用數組類,首先需要在你的類文件中引入
~~~
use think\helper\Str;
~~~
*****
// 檢查字符串中是否包含某些字符串
Str::contains($haystack, $needles)
// 檢查字符串是否以某些字符串結尾
Str::endsWith($haystack, $needles)
// 獲取指定長度的隨機字母數字組合的字符串
Str::random($length = 16)
// 字符串轉小寫
Str::lower($value)
// 字符串轉大寫
Str::upper($value)
// 獲取字符串的長度
Str::length($value)
// 截取字符串
Str::substr($string, $start, $length = null)
- 序言
- 使用條款
- 安裝
- 環境搭建
- 目錄結構
- 鉤子和行為
- 表單生成
- 數據限制
- 命令行
- 一鍵生成CRUD
- 一鍵生成菜單
- 一鍵安裝
- 系統配置
- 常規字段
- 特殊字段1:下拉框(高級)字段
- 特殊字段2:自定義字段
- 特殊字段3:自定義多圖片
- 系統函數/類
- 函數說明
- cache - 緩存管理
- thumb - 獲取縮略圖
- str_cut - 字符截取
- 郵箱/短信
- 插件使用說明
- cms內容管理【cms】
- 變量/常量
- 函數
- getCategory - 欄目獲取
- catpos - 面包屑
- seo - 生成SEO
- buildCatUrl - 生成欄目URL
- buildContentUrl - 創建內容鏈接
- 標簽
- 公共參數
- 欄目標簽
- 列表標簽
- 上一頁標簽
- 下一頁標簽
- Tags標簽
- 萬能標簽
- 原生標簽
- 搜索頁
- 篩選頁
- 內容詳情頁
- 模板
- 技巧/問題
- 將CMS路由設置更簡潔
- 外鏈和單頁如何增加列表類型的子欄目
- 如何合理設置SEO
- 實現電腦和手機模板分離
- 敏感詞檢測
- 欄目授權不全
- 內容頁分頁
- 分頁偽靜態
- tag標簽不支持特殊字符
- 部分虛擬主機tags頁面報錯
- 循環表格
- 二級目錄搭建知識點
- 閱讀收費
- 會員插件【member】
- 介紹
- 自定義表單【formguide】
- 調用方式
- 模板
- 支付插件【pay】
- 支付寶
- 微信
- 常見問題
- 接口文檔【apidoc】
- 簡介
- 配置
- 使用
- 萬能采集【collection】
- 采集列表規則
- 采集內容規則
- 關于圖片
- 案例一:采集yzncms論壇
- cms小程序【wxcms】(重構已下架)
- 前端
- H5設計【diywap】
- 返回頂部【returntop】
- 通用數據導出【dataoutput】
- 多通道短信【easysms】
- 塞郵郵箱【saiyouems】
- 第三方登錄【synclogin】
- 中文分詞【getwords】
- QQ客服【kefu】
- 地圖位置【address】
- 智能人機驗證【vaptcha】
- 行為驗證碼【ajcaptcha】
- 數據轉換【v9toyzn】
- 數據轉換【dedetoyzn】
- 百度收錄查詢【baidurecord】
- 蜘蛛訪問統計【spider】
- editormd編輯器【editormd】
- 敏感詞檢測【sensitive】
- 郵箱發送【phpmailer】
- 內容收藏【favorite】
- 隊列插件【queue】
- 七牛云【qiniu】
- 阿里云oss【alioss】
- 騰訊云【cos】
- 迅搜全文檢索【xunsearch】
- 評論插件【comments】
- 網頁即時通訊【webim】(重構已下架)
- 生成js
- window使用
- linux使用(推薦)
- 常見問題
- 友情鏈接【links】
- 考試插件【kaoshi】(暫停)
- 會員邀請【invite】
- 快遞查詢插件【expressquery】
- 禮品卡提貨系統【pickup】
- 地區插件【area】
- IP歸屬地查詢【ipregion】
- 百度統計插件【baidutongji】
- 消息通知【notice】
- 微信管理【wechat】
- 在線投票系統【vote】
- 前端&組件
- 后臺前端框架
- 文件上傳
- table數據表格
- auth權限驗證
- 動態顯示(Favisible)
- 動態下拉(SelectPage)
- 鍵值組件(Fieldlist)
- uniapp教程
- 常見問題
- YznCMS開發遇到錯誤怎么辦?(新手必看)
- 關閉調試模式
- 偽靜態(URL重寫)
- 虛擬主機不支持綁定public的方法
- 各類虛擬主機偽靜態使用注意事項
- 百度編輯器多圖片上傳被壓縮
- 如何去除訪問鏈接中的index.php
- 后臺路徑admin.php修改
- 后臺密碼忘記重置方法
- 寶塔面板一鍵部署
- 后臺登錄時驗證碼不顯示
- 小程序圖片不顯示
- 如何自定義404頁面顯示模板
- 管理員登錄時提示請于1天后再嘗試登錄
- composer
- composer簡介
- 內置composer
- 各大廠商鏡像地址
- 常用命令
- 拓展知識
- 助手類
- thinkphp維護
- 插件開發
- 目錄結構
- 數據庫
- 測試數據
- 插件信息
- 插件配置
- 核心文件
- 插件函數
- ??開發者入駐
- 申請入駐
- 建立私庫
- 插件入駐流程
- 模板入駐流程
- 安全建議
- 更新日記和補丁包