讲师中心 微信公众号
AI工具推荐 视频效率加速

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

胖敏姑娘_9854

胖敏姑娘_9854

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

|

1044人浏览过

|

来源于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免费学习笔记(深入)”;

PHP
PHP

编写健壮的PHP代码,规避类型转换陷阱、数组怪癖及常见安全漏洞。

下载

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

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

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

原始数据示例:

<?php

// 原始药品名称列表
$name = array (
    0 => '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 "<h3>药品名称及其出现次数:</h3>";

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

  // 示例:只显示出现次数大于1的药品
  if ($count > 1) {
    echo '<p style="color: gray;">药品名称: ' . $medicineName . ',出现次数: ' . $count . '</p>';
    // 如果需要,可以在这里根据 $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怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2371

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

494

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

402

2026.02.12

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2368

2023.11.20

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

698

2025.12.04

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1538

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2204

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5724

2023.10.24

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

20

2026.09.23

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn