0

0

深入理解PHP中关联数组的键值遍历

心靈之曲

心靈之曲

发布时间:2025-11-09 10:58:01

|

1003人浏览过

|

来源于php中文网

原创

深入理解php中关联数组的键值遍历

本教程详细阐述了在PHP中如何正确遍历由`array_count_values`生成的关联数组,以同时获取每个元素的键(例如商品名称)及其对应的值(例如出现次数)。通过介绍`foreach ($array as $key => $value)`语法,文章提供了一个清晰的解决方案,帮助开发者在处理数据统计后,能够灵活地利用统计结果中的所有信息,尤其是在需要根据键进行后续操作(如API查询)的场景。

在PHP开发中,我们经常需要对数组中的元素进行计数,找出重复项及其出现的频率。array_count_values()函数是实现这一目标的强大工具,它返回一个关联数组,其中键是原始数组中的值,而值是这些值出现的次数。然而,在使用foreach循环遍历这个结果时,初学者有时会遇到一个常见问题:如何同时获取键和值,而不仅仅是值。本教程将详细介绍如何利用PHP的foreach语法特性,高效地解决这一问题。

理解问题背景

假设我们有一系列药品名称,并希望统计每种药品出现的次数。初始数据可能如下:

$name = array (
    0 => 'Ibuprofen',
    1 => 'Ibuprofen',
    2 => 'Penicillin',
    3 => 'Penicillin',
    4 => 'Penicillin',
    5 => 'Adderall',
);

$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', ),
);

通过一系列处理(例如,从$mednames中提取med_name并过滤重复项,或者直接对$name进行计数),我们可以得到一个包含药品名称及其出现次数的数组,例如:

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

// 假设经过处理后,我们得到了一个名为 $duplicaten 的数组,包含所有检测到的药品名称
$duplicaten = ['Ibuprofen', 'Ibuprofen', 'Penicillin', 'Penicillin', 'Penicillin', 'Adderall'];

// 使用 array_count_values 统计每个药品名称的出现次数
$cnt = array_count_values($duplicaten);

/*
$cnt 的结果将是:
Array
(
    [Ibuprofen] => 2
    [Penicillin] => 3
    [Adderall] => 1
)
*/

此时,$cnt是一个关联数组,键是药品名称(如'Ibuprofen'),值是其出现次数(如2)。

遍历关联数组:同时获取键和值

当我们需要同时访问关联数组的键和值时,PHP的foreach循环提供了一种简洁的语法:foreach ($array as $key => $value)。

如果仅使用foreach ($cnt as $c),则每次迭代$c将只包含数组的值(即出现次数),而无法直接获取对应的键(药品名称)。为了解决这个问题,我们需要在foreach循环中明确指定键和值的变量。

正确的遍历方式:

foreach ($cnt as $medicineName => $count) {
    // $medicineName 现在包含键(药品名称)
    // $count 现在包含值(出现次数)

    // 示例:如果出现次数大于1,则打印药品名称和次数
    if ($count > 1) { // 注意这里是 $count > 1,而不是 $cnt > 1
        echo '

'; print($count); print('-'); print($medicineName); echo '

'; } }

在这个改进的foreach循环中:

  • $medicineName变量在每次迭代中会接收当前元素的键(即药品名称)。
  • $count变量则会接收当前元素的值(即该药品名称的出现次数)。

通过这种方式,我们可以轻松地访问和利用array_count_values函数返回的所有信息,例如,可以根据$medicineName调用API获取更多药品详情。

完整示例代码

下面是包含所有步骤的完整PHP代码示例:

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

$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', ),
);

// 提取并聚合重复项(此部分代码与原始问题保持一致)
$duplicaten = [];
foreach ($name as $n) {
  for ($x = 0; $x < count($mednames); $x++) {
    if (in_array($n, $mednames[$x])) {
      $duplicaten[] = $n;
      break;
    }
  }
}

// 统计每个药品名称的出现次数
$cnt = array_count_values($duplicaten);

echo "

统计结果 (\$cnt):

"; print_r($cnt); /* 预期输出: Array ( [Ibuprofen] => 2 [Penicillin] => 3 [Adderall] => 1 ) */ echo "

遍历结果:

"; // 遍历 $cnt 数组,同时获取键(药品名称)和值(出现次数) foreach ($cnt as $medicineName => $count) { // 检查出现次数是否大于1 (根据原始问题需求,也可以是其他条件) if ($count > 1) { // 注意:这里是 $count > 1,而不是 $cnt > 1 echo '

'; print($count); print('-'); print($medicineName); echo '

'; } } /* 预期输出:

2-Ibuprofen

3-Penicillin

*/ ?>

注意事项与最佳实践

  1. 区分$count和$cnt: 在条件判断if ($count > 1)中,务必使用循环变量$count来判断当前元素的数量,而不是整个数组$cnt。$cnt是一个数组,直接与数字比较通常会得到true(因为它不是空数组或0),这会导致逻辑错误。
  2. 变量命名: 使用有意义的变量名(如$medicineName和$count)可以显著提高代码的可读性和可维护性。
  3. 适用性: foreach ($array as $key => $value)语法不仅适用于array_count_values的结果,也适用于所有关联数组,包括从数据库查询结果、JSON解码等获取的数据。
  4. 性能: 对于大型数组,foreach循环通常是遍历数组的最高效方式之一。

总结

通过本教程,我们学习了如何在PHP中有效地遍历关联数组,特别是array_count_values的返回结果,以同时获取每个元素的键和值。掌握foreach ($array as $key => $value)这一语法是PHP编程中的一项基本且重要的技能,它能帮助开发者更灵活、更精确地处理和利用数据,从而构建出功能更强大、逻辑更清晰的应用程序。

相关专题

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

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

2513

2023.09.01

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

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

1597

2023.10.11

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

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

1488

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

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

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

精品课程

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

共137课时 | 8.6万人学习

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号