【发布时间】:2017-08-23 15:11:06
【问题描述】:
我正在尝试根据存储的表单数据填充一组复选框。不幸的是,isSelected 元素似乎只返回 false。代码如下:
if($field['type'] == 'checkbox'){
$inputs = $field['inputs'];
$count = '0';
foreach($inputs as $input){
if(($user_meta[$input['id']] !== '') && (isset($user_meta[$input['id']]))){
$select = true;
}
else{
$select = false;
}
$field['choices'][$count] = array(
'text' => $field['choices'][$count]['text'],
'value' => $field['choices'][$count]['value'] ,
'isSelected' => $select );
var_dump($select);
var_dump($field['isSelected']);
$count = $count + '1';
}
}
$select 的 var_dump 正确返回布尔值 true 和 false 值。但是isSelected 元素总是返回一个空字符串。即使我用硬编码的 true 值替换 $select 变量,或者使用 1 和 0 代替 true 和 false,也是如此。
我确定我错过了一些非常基本的东西,但到目前为止我还没有找到解决方案。我将不胜感激任何帮助!
编辑
感谢@Barmar,我有更多关于这个问题的信息。当我尝试为 $field['choices'][$count]['isSelected'] 赋值时失败了。日志显示“PHP 注意:GF_Field_Checkbox 重载元素的间接修改无效”。不幸的是,我不明白为什么这里会出现问题,因为据我所知,错误通常来自使用 __get/set 方法,在这种情况下我实际上并没有使用这些方法。我还尝试了"Indirect modification of overloaded element of SplFixedArray has no effect" 中建议的解决方案,但无济于事。是否有某种设置或配置可能会阻止此分配?
【问题讨论】:
-
应该是
var_dump($field['choices'][$count]['isSelected'])。 -
谢谢。这至少会返回一个布尔值,这对我来说更有意义。不过,它与 $select 的值不匹配,并且总是返回 false。
-
为什么要使用包含相同字段的数组重新分配元素?如果您只想添加
isSelected,只需添加$field['choices'][$count]['isSelected'] = $selected; -
顺便说一句,你应该在这里切换测试的顺序:
if(($user_meta[$input['id']] !== '') && (isset($user_meta[$input['id']]))){你应该测试变量 isset before 测试它的值是否等于某个值。 -
我想不出您发布的代码中会发生这种情况的任何原因。一定有区别。