如果您在這裡,您可能已經意識到 array_map 函數不允許在回調中存取數組鍵。處理關聯數組(具有字串鍵的數組)時,使用鍵而不是值非常有用。
我將向您展示該解決方案的用例以及我實現的新功能。
想要了解更多技術文章,您可以在 Linkedin 或 X 上關注我。
PHP array_map 函數的一個常見實際用例是轉換來自資料庫查詢或 API 回應的資料。例如,假設您有一個使用者資料數組,並且您想要格式化使用者的名稱或從每個使用者記錄中提取特定的資訊。
假設您有一個使用者記錄數組,每個記錄都是一個關聯數組,其中包含名字、姓氏和電子郵件等鍵:
// Array of user data (e.g., from a database query) $users = [ [ 'first_name' => 'John', 'last_name' => 'Doe', 'email' => 'john.doe@example.com' ], [ 'first_name' => 'Jane', 'last_name' => 'Smith', 'email' => 'jane.smith@example.com' ], [ 'first_name' => 'Bob', 'last_name' => 'Johnson', 'email' => 'bob.johnson@example.com' ] ];
您可以輕鬆提取電子郵件地址清單以將通知發送至:
$emails = array_map(function($user) { return $user['email']; }, $users); // Result: ['john.doe@example.com', 'jane.smith@example.com', 'bob.johnson@example.com']
您可以使用 array_map 函數根據使用者物件的資訊新增欄位:
// Using array_map to add the avatar field to each user $result = array_map(function($user) { return array_merge( $user, [ 'avatar' => 'https://eu.ui-avatars.com/api/?background=ff7511&color=fff&name='.$user['first_name'] ] ); }, $users); // Output the result var_dump($result);
我從 NoSQL 資料庫中提取數據,以在我的產品儀表板上建立圖表。我從 NoSQL 資料庫收到的資料如下所示:
$data = [ "2024-08-25" => ["doc_count" => 523, "score" => 0.2, "skipped" => 0], "2024-08-24" => ["doc_count" => 423, "score" => 0.2, "skipped" => 0], "2024-08-23" => ["doc_count" => 453, "score" => 0.2, "skipped" => 0], "2024-08-22" => ["doc_count" => 267, "score" => 0.2, "skipped" => 0], "2024-08-21" => ["doc_count" => 378, "score" => 0.2, "skipped" => 0], "2024-08-20" => ["doc_count" => 325, "score" => 0.2, "skipped" => 0], "2024-08-19" => ["doc_count" => 501, "score" => 0.2, "skipped" => 0], ];
由於用於視覺化圖表的 javascript 庫,我需要將此資料轉換為以下格式,以使前端開發人員的生活更輕鬆:
$result = [ [ "label" => "2024-08-25", "value" => 523 ], [ "label" => "2024-08-24", "value" => 423 ], ... ];
但是要執行此轉換,我需要存取原始數組的鍵以將其放入「標籤」欄位中。但預設的 array_map 函數只允許存取值。
這是使用關聯數組的 array_map_assoc 函數的實作。它提供鍵和值作為回調的參數:
/** * Apply a mapping callback receiving key and value as arguments. * The standard array_map doesn't pass the key to the callback. But in the case of associative arrays, * it could be really helpful. * * array_map_assoc(function ($key, $value) { * ... * }, $items) * * @param callable $callback * @param array $array * @return array */ function array_map_assoc(callable $callback, array $array): array { return array_map(function($key) use ($callback, $array){ return $callback($key, $array[$key]); }, array_keys($array)); }
現在我可以將原始使用者陣列轉換為 javascript 圖表庫的資料格式:
$histogram = array_map_assoc(function ($key, $value) { return [ 'label' => $key, 'value' => $value['doc_count'] ]; }, $data);
要小心,因為 array_map_assoc 函數不會保留字串鍵的狀態,但它會產生一個全新的標準陣列。
我還將此函數作為新的輔助函數添加到了 Laravel 應用程式的全域命名空間:
https://inspector.dev/laravel-custom-helper-functions-fast-tips/
較有經驗的開發人員可能會認為只需使用 foreach 語句即可存取鍵和值:
foreach ($data as $date => $value) { ... }
使用 foreach 時,您必須使用附加變數來儲存結果轉換,並且無法在「一行」語句中建立程式碼。
// Array of user data (e.g., from a database query) $users = [ [ 'first_name' => 'John', 'last_name' => 'Doe', 'email' => 'john.doe@example.com' ], [ 'first_name' => 'Jane', 'last_name' => 'Smith', 'email' => 'jane.smith@example.com' ], [ 'first_name' => 'Bob', 'last_name' => 'Johnson', 'email' => 'bob.johnson@example.com' ] ];
想要了解更多技術文章,您可以在 Linkedin 或 X 上關注我。
Inspector是一款專為軟體開發人員設計的程式碼執行監控工具。您無需在伺服器層級安裝任何內容,只需安裝 Laravel 或 Symfony 軟體套件即可開始使用。
如果您正在尋找 HTTP 監控、資料庫查詢見解以及將警報和通知轉發到您首選訊息傳遞環境的能力,請免費嘗試 Inspector。註冊您的帳戶。
或在網站上了解更多:https://inspector.dev
以上是用於關聯陣列的 PHP array_map – 快速提示的詳細內容。更多資訊請關注PHP中文網其他相關文章!