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
相关产品推荐
相关产品推荐

