如何在PHP关联数组中获取每个角色的最高属性
获取PHP关联数组中每个角色的最高属性
原数组定义
$characters = [ "Character1" => ["Strength" => 1, "Dexterity" => 2, "Intelligence" => 6, "Wisdom" => 6, "Charisma" => 3], "Character2" => ["Strength" => 5, "Dexterity" => 4, "Intelligence" => 1, "Wisdom" => 1, "Charisma" => 6], "Character3" => ["Strength" => 6, "Dexterity" => 5, "Intelligence" => 5, "Wisdom" => 1, "Charisma" => 5], "Character4" => ["Strength" => 1, "Dexterity" => 2, "Intelligence" => 4, "Wisdom" => 3, "Charisma" => 3] ];
需求说明
需要获取每个角色的最高属性(支持多个属性数值相同且为最大值的情况,比如Character1的Intelligence和Wisdom均为最高值6),并输出角色名称、最高属性名称及其对应数值。
尝试过的代码及问题
代码1:逻辑错误
foreach($attributs as $s_key => $value) { if($value > $max) $max = max($attributs); $maxkey = $s_key; } echo "<li>$max , $maxkey</li>"; echo "</ul>";
这段代码未正确初始化$max变量,且条件判断未用大括号包裹多行逻辑,导致$maxkey会被每次循环覆盖,最终无法正确定位最高属性。
代码2:仅能获取数值
foreach($characters as $names => $quality){ echo "$names"; echo max($quality); }
这段代码只能输出角色名称和最高属性的数值,无法获取对应的属性名称,不符合需求。
正确实现方法
核心思路:遍历每个角色,先获取该角色属性的最大值,再筛选出所有数值等于最大值的属性,最后输出结果。
完整代码:
// 遍历每个角色 foreach ($characters as $characterName => $attributes) { // 获取当前角色的属性最大值 $maxValue = max($attributes); // 筛选出所有数值等于最大值的属性 $maxAttributes = array_filter($attributes, function($value) use ($maxValue) { return $value === $maxValue; }); // 输出角色名称及对应最高属性 echo "<h3>$characterName</h3>"; echo "<ul>"; foreach ($maxAttributes as $attrName => $attrValue) { echo "<li>最高属性:$attrName,数值:$attrValue</li>"; } echo "</ul>"; }
代码解释
- 外层
foreach遍历角色数组,拿到每个角色的名称和属性列表。 max($attributes)快速获取当前角色的属性最大值。array_filter结合匿名函数,筛选出所有数值等于最大值的属性,支持多个最高属性的场景。- 内层
foreach遍历筛选后的属性,逐个输出属性名称和数值。
内容的提问来源于stack exchange,提问作者ImAlways_Confused
相关产品推荐
相关产品推荐

