0

0

PHP中如何遍历关联数组并同时获取键与值:以统计药品名称为例

DDD

DDD

发布时间:2025-11-09 11:05:23

|

1004人浏览过

|

来源于php中文网

原创

PHP中如何遍历关联数组并同时获取键与值:以统计药品名称为例

本教程将详细讲解在php中如何高效地遍历关联数组,并同时获取其键(key)和值(value)。通过一个药品名称统计的实际案例,我们将展示如何利用`foreach ($array as $key => $value)`语法解决仅能获取值而无法获取对应键的问题,从而帮助开发者在数据处理中更灵活地访问和利用数组信息。

引言:理解关联数组的遍历需求

PHP中的数组是一种功能强大的数据结构,尤其关联数组(associative array)允许我们使用有意义的字符串作为键来存储和访问数据。在许多数据处理场景中,例如对某个元素进行计数后,我们常常需要同时获取这些元素的名称(即键)和它们的计数(即值)。例如,在一个药品库存管理系统中,我们可能需要统计每种药品的数量,并根据药品名称进一步查询其详细信息。

问题剖析:为何只得到值而无法获取键?

当我们使用像array_count_values()这样的函数对数组进行统计后,通常会得到一个以原数组元素作为键、出现次数作为值的关联数组。例如,array('Ibuprofen' => 2, 'Penicillin' => 3)。

如果此时我们仅使用foreach ($array as $value)的传统方式来遍历这个结果数组,PHP会将每次迭代中当前元素的值赋给$value变量,而对应的键则无法直接访问。这在需要根据键(如药品名称)进行后续操作(如调用API获取详细信息)时,会成为一个障碍。例如,在上述药品计数的例子中,如果只用foreach ($cnt as $c),$c将依次为2和3,而Ibuprofen和Penicillin这些重要的键则无法在循环体内直接获取。

解决方案:利用foreach ($array as $key => $value)语法

PHP的foreach循环提供了一种标准且高效的语法来同时访问关联数组的键和值:foreach ($array as $key => $value)。

立即学习PHP免费学习笔记(深入)”;

在这个语法中,每次迭代时,当前元素的键会被赋给$key变量,而值则会被赋给$value变量。这使得我们可以在循环体内同时使用键和值进行任何所需的逻辑处理、数据展示或API调用。

造梦阁AI
造梦阁AI

AI小说推文一键成片,你的故事值得被看见

下载

实战演练:药品名称统计与信息提取

为了更好地理解这一概念,我们通过一个具体的药品名称统计案例来演示。假设我们有两个数组:一个包含原始的药品名称列表,另一个包含更详细的药品信息。我们的目标是统计重复出现的药品名称及其次数,并能够同时获取名称和次数。

原始数据示例:

 'Ibuprofen',
    1 => 'Ibuprofen',
    2 => 'Penicillin',
    3 => 'Penicillin',
    4 => 'Penicillin',
    5 => 'Adderall',
);

// 包含详细信息的药品列表(其中med_name是药品名称)
$mednames = array (
    0 => array ( 'name' => 'xxxx1', 'med_name' => 'Ibuprofen', ),
    1 => array ( 'name' => 'xxxx2', 'med_name' => 'Ibuprofen', ),
    2 => array ( 'name' => 'xxxx3', 'med_name' => 'Penicillin', ),
    3 => array ( 'name' => 'xxxx4', 'med_name' => 'Penicillin', ),
    4 => array ( 'name' => 'xxxx5', 'med_name' => 'Penicillin', ),
    5 => array ( 'name' => 'xxxx6', 'med_name' => 'Adderall', ),
);

// 步骤1: 识别并收集重复的药品名称
$duplicaten = [];
foreach ($name as $n) {
  // 遍历$mednames,检查$n是否存在于任何一个药品的'med_name'字段中
  foreach ($mednames as $med) {
    if (isset($med['med_name']) && $n === $med['med_name']) {
      $duplicaten[] = $n;
      break; // 找到匹配项后,跳出内层循环,避免重复添加
    }
  }
}

// 步骤2: 统计每个药品名称的出现次数
// $cnt 将是一个关联数组,键是药品名称,值是出现次数
$cnt = array_count_values($duplicaten);

// 此时 $cnt 的内容类似:
// Array
// (
//     [Ibuprofen] => 2
//     [Penicillin] => 3
//     [Adderall] => 1
// )

echo "

药品名称及其出现次数:

"; // 步骤3: 遍历统计结果,同时获取药品名称(键)和出现次数(值) foreach ($cnt as $medicineName => $count) { // 在这里,$medicineName 变量包含了药品的名称(如 'Ibuprofen') // $count 变量包含了该药品出现的次数(如 2) // 示例:只显示出现次数大于1的药品 if ($count > 1) { echo '

药品名称: ' . $medicineName . ',出现次数: ' . $count . '

'; // 如果需要,可以在这里根据 $medicineName 调用API获取更多信息 // 例如: $api_info = call_medicine_api($medicineName); } } ?>

代码解析:

  1. 数据初始化: 定义了$name和$mednames两个示例数组,模拟实际应用中的数据结构。
  2. 识别重复项: 第一个嵌套foreach循环用于从$name数组中筛选出在$mednames数组的med_name字段中存在的药品名称,并将它们收集到$duplicaten数组中。这里我们优化了原始问题中的in_array用法,直接比较med_name字段,使其意图更明确。
  3. 统计出现次数: array_count_values($duplicaten)函数是PHP内置的,用于统计数组中每个值出现的次数,并返回一个以值为键、次数为值的关联数组。
  4. 遍历并获取键值: 关键在于最后一个foreach ($cnt as $medicineName => $count)循环。
    • $medicineName变量在每次迭代中都会接收当前元素的键(即药品名称)。
    • $count变量则接收当前元素的值(即该药品名称的出现次数)。
    • 这样,我们就可以在循环体内同时利用药品名称和其计数进行逻辑判断和输出。

注意事项与最佳实践

  1. 变量命名: 使用清晰、有意义的变量名(如$medicineName、$count)可以极大地提高代码的可读性和可维护性,避免混淆。
  2. 性能考量: 对于极大型数组的嵌套循环,性能可能成为一个问题。在实际应用中,如果数据量巨大,可以考虑优化数据结构(例如,将$mednames预处理成以med_name为键的哈希表,以便快速查找),或使用更高效的算法。然而,对于array_count_values的结果,foreach遍历通常是高效且标准的做法。
  3. 数据类型与存在性检查: 在访问数组元素(如$med['med_name'])时,最好进行isset()检查,以防止因键不存在而导致的PHP警告或错误。
  4. 错误处理: 当从外部API获取数据时,务必加入适当的错误处理机制,例如检查API响应是否成功、数据格式是否符合预期等。

总结

通过掌握foreach ($array as $key => $value)这一PHP核心语法,开发者能够灵活高效地处理关联数组,同时访问其键和值。这对于数据统计结果的展示、基于键值进行进一步逻辑处理、或者需要根据键来获取更多相关信息的场景(如本例中根据药品名称调用API)都至关重要。在编写代码时,注重清晰的变量命名和适当的循环结构,将有助于构建更健壮、可维护的应用程序。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2534

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1604

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1498

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

952

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1416

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1445

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1306

2023.11.13

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

6

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号