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

PHP多维数组匹配搜索:按指定条件返回数组键名

问题描述

现有数组如下:

Array ( 
    [0] => Array ( 
        [sitename] => newsite 
        [sitelink] => link1 
        [tosite] => testsite 
        [tolink] => ABCD 
    ) 
    [2] => Array ( 
        [sitename] => newsite 
        [sitelink] => link2 
        [tosite] => secondsite 
        [tolink] => 1234 
    ) 
)

需求:搜索该数组中已设置sitename且sitelink为link1或link2的条目,返回对应键名(比如sitelink为link1时返回0,为link2时返回2)。希望创建类似arraysearch('link1', $myarray)的函数,仅检查sitename已设置的条目,忽略tosite和tolink的值。

当前测试函数如下:

function myfunction($array, $site, $value) {
    foreach($array as $key => $newarr) {
        if ( $newarr[$site] === $value ) return $key;
    }
    return false;
}
echo myfunction($sites, 'sitelink', 'link1');

该函数可实现部分功能,但未检查sitename是否已设置,询问如何完善实现需求。

解决方案

很简单啦,只需要在原有判断条件里加上对sitename存在性的检查就可以实现你的需求。我们可以用PHP的isset()函数来验证这个键是否存在且不为null,这样就能确保只处理那些已经设置了sitename的条目。

修改后的函数如下:

function myfunction($array, $site, $value) {
    foreach($array as $key => $newarr) {
        // 先检查sitename是否已设置,再匹配目标字段的值
        if (isset($newarr['sitename']) && $newarr[$site] === $value) {
            return $key;
        }
    }
    // 如果没有找到符合条件的条目,返回false
    return false;
}

// 调用示例
echo myfunction($sites, 'sitelink', 'link1'); // 输出0
echo myfunction($sites, 'sitelink', 'link2'); // 输出2

补充说明

  • isset($newarr['sitename'])会确保我们只处理包含sitename键的子数组,哪怕sitename的值是空字符串或者0,只要键存在就会通过检查;如果需要确保sitename有非空值,可以改成!empty($newarr['sitename'])。
  • 保持了原函数的高效逻辑:找到第一个符合条件的条目就立即返回键名,不需要遍历整个数组;如果遍历完都没找到匹配项,返回false。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:27:25