用於關聯陣列的 PHP array_map – 快速提示

Barbara Streisand
發布: 2024-10-26 07:59:30
原創
516 人瀏覽過

如果您在這裡,您可能已經意識到 array_map 函數不允許在回調中存取數組鍵。處理關聯數組(具有字串鍵的數組)時,使用鍵而不是值非常有用。

我將向您展示該解決方案的用例以及我實現的新功能。

想要了解更多技術文章,您可以在 Linkedin 或 X 上關注我。

array_map 用例

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']
登入後複製

場景2:新增訊息

您可以使用 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 語句即可存取鍵和值:

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 上關注我。

免費監控您的 PHP 應用程式

Inspector是一款專為軟體開發人員設計的程式碼執行監控工具。您無需在伺服器層級安裝任何內容,只需安裝 LaravelSymfony 軟體套件即可開始使用。

如果您正在尋找 HTTP 監控、資料庫查詢見解以及將警報和通知轉發到您首選訊息傳遞環境的能力,請免費嘗試 Inspector。註冊您的帳戶。

或在網站上了解更多:https://inspector.dev

PHP array_map for associative array – Fast Tips

以上是用於關聯陣列的 PHP array_map – 快速提示的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!