連想配列の PHP array_map – 簡単なヒント

Barbara Streisand
リリース: 2024-10-26 07:59:30
オリジナル
514 人が閲覧しました

ここにいる方は、array_map 関数がコールバック内の配列キーへのアクセスを許可していないことをおそらくすでにご存じでしょう。値以外のキーを持つことは、連想配列 (文字列キーを持つ配列) を扱う場合に非常に便利です。

このソリューションの使用例と実装した新しい関数を紹介します。

さらに技術的な記事については、Linkedin または X で私をフォローしてください。

array_map の使用例

PHP の array_map 関数の一般的な実際の使用例は、データベース クエリまたは API 応答からのデータの変換です。たとえば、ユーザー データの配列があり、ユーザーの名前を書式設定するか、各ユーザー レコードから特定の情報を抽出するとします。

ユーザー レコードの配列があり、各レコードが first_name、last_name、email などのキーを含む連想配列であると想像してください。

// 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'
    ]
];
ログイン後にコピー
ログイン後にコピー

シナリオ 1: 情報を抽出する

電子メール アドレスのリストを簡単に抽出して通知を送信できます。

$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 を使用すると、結果の変換を保存するために追加の変数を使用する必要があり、コードを「1 行」のステートメントで構成することはできません。

// 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 は、ソフトウェア開発者向けに特別に設計されたコード実行監視ツールです。サーバーレベルで何もインストールする必要はありません。Laravel または Symfony パッケージをインストールするだけで準備完了です。

HTTP モニタリング、データベース クエリに関する洞察、アラートや通知を好みのメッセージング環境に転送する機能をお探しの場合は、Inspector を無料でお試しください。アカウントを登録してください。

または、Web サイトで詳細をご覧ください: https://inspector.dev

PHP array_map for associative array – Fast Tips

以上が連想配列の PHP array_map – 簡単なヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!