You need to enable JavaScript to run this app. PHP array_search因数组键重复忽略首项,如何实现多天气码对应同一图标
优惠活动
大模型
产品
解决方案
定价
更多

PHP array_search因数组键重复忽略首项,如何实现多天气码对应同一图标

问题根因

你排查时将问题聚焦在array_search的严格匹配逻辑上,但实际上匹配失效的根源在数组初始化阶段就已经存在:

  • PHP关联数组的键名具有唯一性,重复定义同名称的键时,后一次的赋值会直接覆盖前一次的结果。
  • 原代码中两次使用'wi-day-cloudy'作为键,第一次绑定的02d条目在数组初始化时就已经被完全覆盖丢弃,最终实际存入数组的条目里根本没有值为02d的记录,无论是否开启严格比对,都不可能匹配到对应的图标类。
  • 原代码的数组索引方向完全颠倒:查询的输入是具有唯一性的天气码,查询的结果是可重复的图标类,原代码反而把可重复的图标类当键、把唯一的天气码当值,才需要反向遍历数组匹配,天然会遇到重复值场景下仅返回最后一个匹配键的问题。
修复方案

将数组的索引逻辑调整为以唯一的天气码为键,对应图标类为值,从根源上避免键重复、反向匹配的问题,同时增加无匹配的兜底逻辑,避免异常输入下输出空的class属性:

function weathericon($string) {
    $array_icons = [
        '01d' => 'wi-day-sunny',
        '02d' => 'wi-day-cloudy',
        '03d' => 'wi-day-cloudy',
        '04d' => 'wi-cloudy',
        '13d' => 'wi-day-snow'
    ];
    // 无匹配时使用默认图标类做兜底
    $icon_class = $array_icons[$string] ?? 'wi-na';
    return '<i class="wi '. $icon_class .'"></i>';
}
方案优势
  • 所有天气码都是唯一标识,作为键不存在覆盖问题,02d和03d作为两个独立的键,哪怕指向完全相同的图标类,也能被精准匹配
  • 直接通过数组键取值,不需要反向遍历整个数组,执行效率远高于array_search的反向匹配逻辑
  • 完全规避了原逻辑中重复值导致的匹配偏差问题

内容的提问来源于stack exchange,提问作者user718990

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 05:24:05