亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

ディレクトリ 検索
閱讀前篇 簡介 Yii 是什么 從 Yii 1.1 升級 入門 安裝 Yii 運行應(yīng)用 第一次問候 使用Forms 數(shù)據(jù)庫應(yīng)用 使用 Gii 生成代碼 進階 應(yīng)用結(jié)構(gòu) 概述 入口腳本 應(yīng)用(Applications) 應(yīng)用組件(Application Components) 控制器(Controllers) 模型(Models) 視圖(views) 模塊(Modules) 過濾器(Filters) 小部件(Widgets) 前端資源(Assets) 擴展(Extensions) 請求處理 運行概述 啟動引導(dǎo)(Bootstrapping) 路由和創(chuàng)建URL 請求(Requests) 響應(yīng)(Responses) Sessions 和 Cookies 錯誤處理(Handling Errors) 日志(Logging) 關(guān)鍵概念 組件(Component) 屬性(Property) 事件(Events) 行為(Behaviors) 配置(Configurations) 別名(Aliases) 類自動加載(Autoloading) 服務(wù)定位器(Service Locator) 依賴注入容器(Dependency Injection Container) 配合數(shù)據(jù)庫工作 數(shù)據(jù)庫訪問 (Data Access Objects) 查詢生成器(Query Builder) 活動記錄(Active Record) 數(shù)據(jù)庫遷移(Migrations) Sphinx Redis MongoDB Elasticsearch 接收用戶數(shù)據(jù) 創(chuàng)建表單(Creating Forms) 輸入驗證(Validating Input) 文件上傳(Uploading Files) 收集列表輸入(Collecting Tabular Input) 多模型的復(fù)合表單(Getting Data for Multiple Models) 顯示數(shù)據(jù) 格式化輸出數(shù)據(jù)(Data Formatting) 分頁(Pagination) 排序(Sorting) 數(shù)據(jù)提供器(Data Providers) 數(shù)據(jù)小部件(Data Widgets) 客戶端腳本使用(Working with Client Scripts) 主題(Theming) 安全 認證(Authentication) 授權(quán)(Authorization) 處理密碼(Working with Passwords) 客戶端認證(Auth Clients) 最佳安全實踐(Best Practices) 緩存 概述 數(shù)據(jù)緩存 片段緩存 頁面緩存 HTTP 緩存 RESTfull Web服務(wù) 快速入門(Quick Start) 資源(Resources) 控制器(Controllers) 路由(Routing) 格式化響應(yīng)(Response Formatting) 授權(quán)認證(Authentication) 速率限制(Rate Limiting) 版本(Versioning) 錯誤處理(Error Handling) 開發(fā)工具 調(diào)試工具欄和調(diào)試器 使用Gii生成代碼 生成API文檔 測試 概述(Overview) 配置測試環(huán)境(Testing environment setup) 單元測試(Unit Tests) 功能測試(Function Tests) 驗收測試(Acceptance Tests) 測試夾具(Fixtures) 高級專題 高級應(yīng)用模板 創(chuàng)建自定義應(yīng)用程序結(jié)構(gòu) 控制臺命令 核心驗證器(Core Validators) 國際化 收發(fā)郵件 性能優(yōu)化 共享主機環(huán)境 模板引擎 集成第三方代碼 小部件 Bootstrap 小部件 Jquery UI 助手類 概述 Array 助手(ArrayHelper) Html 助手(Html) Url 助手(Url)
テキスト

Array 助手

數(shù)組助手類

除了PHP中豐富的數(shù)組函數(shù)集, Yii 數(shù)組助手類提供了額外的靜態(tài)方法,讓你更高效地處理數(shù)組。

獲取值

用原生PHP從一個對象、數(shù)組、或者包含這兩者的一個復(fù)雜數(shù)據(jù)結(jié)構(gòu)中獲取數(shù)據(jù)是非常繁瑣的。 你首先得使用isset?檢查 key 是否存在, 然后如果存在你就獲取它,如果不存在, 則提供一個默認返回值:

class User{
    public $name = 'Alex';
}

$array = [
    'foo' => [
        'bar' => new User(),
    ]
];

$value = isset($array['foo']['bar']->name) ? $array['foo']['bar']->name : null;

Yii 提供了一個非常方便的方法來做這件事:

$value = ArrayHelper::getValue($array, 'foo.bar.name');

方法的第一個參數(shù)是我們從哪里獲取值。第二個參數(shù)指定了如何獲取數(shù)據(jù), 它可以是下述幾種類型中的一個:

  • 數(shù)組鍵名或者欲從中取值的對象的屬性名稱;
  • 以點號分割的數(shù)組鍵名或者對象屬性名稱組成的字符串,上例中使用的參數(shù)類型就是該類型;
  • 返回一個值的回調(diào)函數(shù)。

回調(diào)函數(shù)如下例所示:

$fullName = ArrayHelper::getValue($user, function ($user, $defaultValue) {
    return $user->firstName . ' ' . $user->lastName;
});

第三個可選的參數(shù)如果沒有給定值,則默認為?null,如下例所示:

$username = ArrayHelper::getValue($comment, 'user.username', 'Unknown');

對于取到值后想要立即從數(shù)組中刪除的情況,你可以使用?remove?方法:

$array = ['type' => 'A', 'options' => [1, 2]];
$type = ArrayHelper::remove($array, 'type');

執(zhí)行了上述代碼之后,?$array?將包含?['options' => [1, 2]]?并且?$type?將會是?A?。 注意和?getValue?方法不同的是,remove?方法只支持簡單鍵名。

檢查鍵名的存在

ArrayHelper::keyExists?工作原理和array_key_exists差不多,除了 它還可支持大小寫不敏感的鍵名比較,比如:

$data1 = [
    'userName' => 'Alex',
];

$data2 = [
    'username' => 'Carsten',
];

if (!ArrayHelper::keyExists('username', $data1, false) || !ArrayHelper::keyExists('username', $data2, false)) {
    echo "Please provide username.";
}

檢索列

通常你要從多行數(shù)據(jù)或者多個對象構(gòu)成的數(shù)組中獲取某列的值,一個普通的例子是獲取id值列表。

$data = [
    ['id' => '123', 'data' => 'abc'],
    ['id' => '345', 'data' => 'def'],
];
$ids = ArrayHelper::getColumn($array, 'id');

結(jié)果將是?['123', '345']。

如果需要額外的轉(zhuǎn)換或者取值的方法比較復(fù)雜, 第二參數(shù)可以指定一個匿名函數(shù):

$result = ArrayHelper::getColumn($array, function ($element) {
    return $element['id'];
});

重建數(shù)組索引

按一個指定的鍵名重新索引一個數(shù)組,可以用?index?方法。輸入的數(shù)組應(yīng)該是多維數(shù)組或者是一個對象數(shù)組。 鍵名(譯者注:第二個參數(shù))可以是子數(shù)組的鍵名、對象的屬性名, 也可以是一個返回給定元素數(shù)組鍵值的匿名函數(shù)。

如果一個鍵值(譯者注:第二個參數(shù)對應(yīng)的值)是 null,相應(yīng)的數(shù)組元素將被丟棄并且不會放入到結(jié)果中,例如,

$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'];
});

建立哈希表

為了從一個多維數(shù)組或者一個對象數(shù)組中建立一個映射表(鍵值對),你可以使用?map方法.$from?和?$to?參數(shù)分別指定了欲構(gòu)建的映射表的鍵名和屬性名。 根據(jù)需要,你可以按照一個分組字段?$group?將映射表進行分組,例如。

$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');
// 結(jié)果是: // [//     '123' => 'aaa',//     '124' => 'bbb',//     '345' => 'ccc',// ]

$result = ArrayHelper::map($array, 'id', 'name', 'class');
// 結(jié)果是:// [//     'x' => [//         '123' => 'aaa',//         '124' => 'bbb',//     ],//     'y' => [//         '345' => 'ccc',//     ],// ]

多維排序

multisort?方法可用來對嵌套數(shù)組或者對象數(shù)組進行排序,可按一到多個鍵名排序,比如,

$data = [
    ['age' => 30, 'name' => 'Alexander'],
    ['age' => 30, 'name' => 'Brian'],
    ['age' => 19, 'name' => 'Barney'],
];
ArrayHelper::multisort($data, ['age', 'name'], [SORT_ASC, SORT_DESC]);

排序之后我們在?$data?中得到的值如下所示:

[
    ['age' => 19, 'name' => 'Barney'],
    ['age' => 30, 'name' => 'Brian'],
    ['age' => 30, 'name' => 'Alexander'],
];

第二個參數(shù)指定排序的鍵名,如果是單鍵名的話可以是字符串,如果是多鍵名則是一個數(shù)組, 或者是如下例所示的一個匿名函數(shù):

ArrayHelper::multisort($data, function($item) {
    return isset($item['age']) ? ['age', 'name'] : 'name';
});

第三個參數(shù)表示增降順序。單鍵排序時,它可以是?SORT_ASC?或者?SORT_DESC?之一。 如果是按多個鍵名排序,你可以用一個數(shù)組為各個鍵指定不同的順序。

最后一個參數(shù)(譯者注:第四個參數(shù))是PHP的排序標(biāo)識(sort flag),可使用的值和調(diào)用PHP?sort()?函數(shù)時傳遞的值一樣。

檢測數(shù)組類型

想知道一個數(shù)組是索引數(shù)組還是聯(lián)合數(shù)組很方便,這有個例子:

// 不指定鍵名的數(shù)組$indexed = ['Qiang', 'Paul'];
echo ArrayHelper::isIndexed($indexed);

// 所有鍵名都是字符串$associative = ['framework' => 'Yii', 'version' => '2.0'];
echo ArrayHelper::isAssociative($associative);

HTML 編碼和解碼值

為了將字符串?dāng)?shù)組中的特殊字符做 HTML 編解碼,你可以使用下列方法:

$encoded = ArrayHelper::htmlEncode($data);
$decoded = ArrayHelper::htmlDecode($data);

默認情況只會對值做編碼(譯者注:原文中是編碼,應(yīng)為編解碼)。通過給第二個參數(shù)傳?false?,你也可以對鍵名做編碼。 編碼將默認使用應(yīng)用程序的字符集,你可以通過第三個參數(shù)指定該字符集。

合并數(shù)組

  /**
    * 將兩個或者多個數(shù)組遞歸式的合并為一個數(shù)組。
    * 如果每個數(shù)組有一個元素的鍵名相同,
    * 那么后面元素的將覆蓋前面的元素(不同于 array_merge_recursive)。
    * 如果兩個數(shù)組都有相同鍵名的數(shù)組元素(譯者注:嵌套數(shù)組)
    * 則將引發(fā)遞歸合并。
    * 對數(shù)值型鍵名的元素,后面數(shù)組中的這些元素會被追加到前面數(shù)組中。
    * @param array $a 被合并的數(shù)組
    * @param array $b 合并的數(shù)組,你可以在第三、第四個
    * 參數(shù)中指定另外的合并數(shù)組,等等
    * @return 合并的結(jié)果數(shù)組 (原始數(shù)組不會被改變)
    */
    public static function merge($a, $b)

對象轉(zhuǎn)換為數(shù)組

你經(jīng)常要將一個對象或者對象的數(shù)組轉(zhuǎn)換成一個數(shù)組,常見的情形是,為了通過REST API提供數(shù)據(jù)數(shù)組(或其他使用方式), 將AR模型(活動記錄模型)轉(zhuǎn)換成數(shù)組。如下代碼可完成這個工作:

$posts = Post::find()->limit(10)->all();
$data = ArrayHelper::toArray($posts, [
    'app\models\Post' => [
        'id',
        'title',
        // the key name in array result => property name
        'createTime' => 'created_at',
        // the key name in array result => anonymous function
        'length' => function ($post) {
            return strlen($post->content);
        },
    ],
]);

第一個參數(shù)包含我們想要轉(zhuǎn)換的數(shù)據(jù),在本例中,我們要轉(zhuǎn)換一個叫?Post?的 AR 模型。

第二個參數(shù)是每個類的轉(zhuǎn)換映射表,我們在此設(shè)置了一個Post?模型的映射。 每個映射數(shù)組包含一組的映射,每個映射可以是:

  • 一個要包含的照原樣的字段名(和類中屬性的名稱一致);
  • 一個由你可隨意取名的鍵名和你想從中取值的模型列名組成的鍵值對;
  • 一個由你可隨意取名的鍵名和有返回值的回調(diào)函數(shù)組成的鍵值對;

這上面的轉(zhuǎn)換結(jié)果將會是:

[
    'id' => 123,
    'title' => 'test',
    'createTime' => '2013-01-01 12:00AM',
    'length' => 301,
]
也可以在一個特定的類中實現(xiàn)yii\base\Arrayable接口, 從而為其對象提供默認的轉(zhuǎn)換成數(shù)組的方法。
前の記事: 次の記事: