如果您在这里,您可能已经意识到 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中文网其他相关文章!