You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现仅当数组同时存在指定匹配键时返回天气数据?

修正后的PHP方法实现

原代码核心问题分析

  1. 遍历数组时仅获取了值,未正确获取键名,导致无法判断键的特征
  2. 逻辑矛盾:要求单个键同时匹配_1和__last,这在实际场景中不可能实现
  3. 赋值语句引用错误的数组元素,无法正确提取天气值
  4. 未先校验两种目标键是否同时存在,直接遍历收集数据不符合需求

修正后的代码实现

// 假设$infoList是类的成员属性,需通过$this->访问
private $infoList = array(
    "_key_1"=>array("time"=>9, "day"=>"Tuesday", "weather"=>"sunny", "humidity"=>"80%"),
    "_key_2"=>array("time"=>5, "day"=>"Tuesday", "weather"=>"cloudy"),
    "_key__last"=>array("time"=>3, "day"=>"Sunday", "weather"=>"rainy")
);

public function getData() {
    $result = [];
    
    // 遍历数组,收集符合条件的天气值
    foreach($this->infoList as $key => $item) {
        // 匹配包含"_1"的键
        if (strpos($key, "_1") !== false) {
            $result["_1"] = $item["weather"];
        }
        // 匹配包含"__last"的键
        if (strpos($key, "__last") !== false) {
            $result["__last"] = $item["weather"];
        }
    }
    
    // 仅当两种目标键对应的值都存在时返回,否则返回空数组
    return (isset($result["_1"]) && isset($result["__last"])) ? $result : [];
}

关键改动说明

  • 正确遍历键值对:使用foreach($this->infoList as $key => $item)同时获取键名和对应数据项,解决原代码无法判断键特征的问题
  • 高效的字符串匹配:用strpos替代正则表达式,针对简单的字符串包含判断更高效;如果需要严格匹配键的后缀(如必须以_1或__last结尾),可替换为正则:
    // 匹配以"_1"结尾的键
    if (preg_match('/_1$/', $key)) { ... }
    // 匹配以"__last"结尾的键
    if (preg_match('/__last$/', $key)) { ... }
    
  • 先收集后校验:先遍历收集所有符合条件的数据,再校验两种目标值是否同时存在,符合需求逻辑
  • 规范变量访问:类方法中访问成员属性需用$this->infoList,避免全局变量的不规范使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:40:50