使用整数字段通过按位运算存储选定的日期

Posted

技术标签:

【中文标题】使用整数字段通过按位运算存储选定的日期【英文标题】:Use an integer field to store the selectged days with bitwise op 【发布时间】:2021-08-30 04:20:15 【问题描述】:

我正在编写一个包含一周中所有日期的表单,但是这些天保存在 int 字段 $days 中。我正在使用按位运算来显示选定的日期。

% if (day.days b-and 1) == 1 %
     "sunday" |trans 
% endif %
% if (day.days b-and 2) == 2 %
     "monday" |trans 
% endif %
....

我不知道如何显示复选框数组并将其转换为 int 和相反。

这里是formtype的一部分

    $informations = $builder->create('information', FormType::class, [
        'label'=>'Information',
        'inherit_data' => true,
        'label_attr' => ['class'=>'catlabel']])
        ->add('categoryQualityView', ChoiceType::class, [
            'required' => true,
            'label' => 'viewQuality',
            'choices' => PlaceRepository::$categoriesRates,
            'attr' => [
                'class' => 'selectpicker',
            ],
        ])
        ->add('categoryGastronomy', ChoiceType::class, [
            'label' => 'Gastronomy',
            'required' => true,
            'choices' => PlaceRepository::$categoriesGastronomy,
            'attr' => [
                'class' => 'selectpicker',
            ],
        ])
        ->add('price', MoneyType::class, [
            'required' => false,
            'label' => 'Price',
        ])
        ->add('days', IntegerType::class, [
            'required' => false,
            'label' => 'Days',
        ])
        ->add('description', TextType::class, [
            'required' => false,
            'label' => 'Description',
        ])
        ;

【问题讨论】:

你有 FormType 或类似的东西吗?如果是,您可以将其添加到您的问题中 添加了部分表单类型 【参考方案1】:

对于您的情况,您可以创建一个自定义 "Form Field Type"(如果需要,还可以创建一个自定义 Data Transformer)并按照文档中的说明自定义表单模板。

例如:

class DaysOfWeekType extends AbstractType

    public function configureOptions(OptionsResolver $resolver): void
    
        $resolver->setDefaults([
            'choices' => [
                'Monday' => 1,
                'Tuesday' => 2,
                ...
            ],
        ]);
    

    public function getParent(): string
    
        return ChoiceType::class;
    

【讨论】:

以上是关于使用整数字段通过按位运算存储选定的日期的主要内容,如果未能解决你的问题,请参考以下文章

用于减少内存的 Java 整数标志和按位运算

位运算

使用按位运算进行基数排序

GPU 上整数和按位运算的性能

使用按位运算从 int 日期中提取月份 (yyyyMMdd)

128 位整数之间的按位运算