PHP多维关联数组循环赋值access布尔值失效问题求解
错误原因分析
- 不必要的嵌套循环:外层
foreach遍历得到的$value已经是包含group和access的子数组,不需要再遍历子数组的键值对 - 数组索引使用错误:外层数组的键是
$key(如428995、896325这类数值字符串),误用子数组的值$sub_value作为索引完全找不到对应数组项 - 语法错误:数组键
access、group未加单引号包裹,且'group缺少闭合单引号;函数参数是$ldapconn,调用时误用未定义的$ldap变量 - 数组传值特性:PHP默认数组是传值调用,函数内修改的是数组副本,不会影响外部的原数组
正确实现方案
方案1:通过返回值返回修改后的数组(更安全,无副作用)
function groupSearch($ldapconn, $user, $grouparray) { foreach ($grouparray as $key => $value) { // 直接调用ldap查询方法,给对应项的access赋值 $grouparray[$key]['access'] = checkGroupMembership($ldapconn, $user, $value['group']); } return $grouparray; } // 外部调用方式 $grouparray = groupSearch($ldapconn, $user, $grouparray);
方案2:通过引用传参修改原数组
// 数组参数前加&表示传引用,函数内修改会直接作用到原数组 function groupSearch($ldapconn, $user, &$grouparray) { foreach ($grouparray as $key => $value) { $grouparray[$key]['access'] = checkGroupMembership($ldapconn, $user, $value['group']); } } // 外部调用方式,不需要接收返回值 groupSearch($ldapconn, $user, $grouparray);
内容的提问来源于stack exchange,提问作者dangerprone
相关产品推荐
相关产品推荐

