【问题标题】:PHP array element always returns falsePHP 数组元素总是返回 false
【发布时间】: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 测试它的值是否等于某个值。
  • 我想不出您发布的代码中会发生这种情况的任何原因。一定有区别。

标签: php arrays boolean


【解决方案1】:

我相信我发现了错误。请注意,您不需要在数组创建中使用 $count 变量,因为您从 0++ 开始。计数也可以简写为 $count++;

看起来这是不正确的var_dump($field['isSelected']);,你的意思是var_dump($field['choices'][$count]['isSelected']);

$field['choices'][] = array( 
        'text' => $field['choices'][$count]['text'], 
        'value' => $field['choices'][$count]['value'] , 
        'isSelected' => $select );
var_dump($select);
var_dump($field['choices'][$count]['isSelected']);
$count++;

【讨论】:

  • 这与我在评论中所说的相同。这个微不足道的错误不值得写一个真正的答案。
  • 但他也在评论中说修复这个仍然不起作用。
  • $field['choices'][] 是错误的。他不是添加到新数组中,而是替换同一数组中的元素。
  • $field['choices'][];那么就不需要重新赋值,直接更新isSelected即可。
猜你喜欢
  • 2017-07-11
  • 1970-01-01
  • 2020-12-27
  • 2014-08-26
  • 2012-08-23
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多