【问题标题】:Yii2 select2 selected one value 2 and more timeYii2 select2 选择了一个值 2 和更多时间
【发布时间】:2022-01-02 03:35:21
【问题描述】:

我有选择2

return $this->form->field($this->model, 'observers')
            ->widget(Select2::className(),
                [
                    'data' => Tasks::getAllStaffsGroupOffice(),
                    'disabled' => !$this->can['changeObservers'],
                    'options' => [
                        'multiple' => true,
                        'value' => ArrayHelper::map($this->model->observers, 'staff_id', 'staff_id'),
                        'placeholder' => Yii::t('tasks_forms', 'FORM_PLACEHOLDER_CHOOSE'),
                        'class' => 'hiddenInput'
                    ],
                    'pluginOptions' => [
                        'allowClear' => true,
                        'closeOnSelect'=> false,

                    ],
                    'pluginLoading' => false,
                ]);

Tasks::getAllStaffsGroupOffice() 按办公室获取用户数组。示例 ->

 array:4 [▼
  "main office" => array:1 [▼
    2 => "123 123"
  ]
  "office 1" => array:3 [▼
    3 => "staff_1"
    6 => "staff_2"
    2 => "123 123"
  ]
  "office 3" => array:2 [▼
    4 => "staff_3"
    3 => "staff_1"
  ]
  "office 2" => array:2 [▼
    5 => "staff_4"
    3 => "staff_1"
  ]
]

select2 值示例 -> array (2 => "2")

结果,小部件本身的显示看起来像这样 select2 value

如何让在2个及以上办公室的员工只显示1次?

【问题讨论】:

    标签: php yii2 jquery-select2 kartik-v


    【解决方案1】:

    我认为您应该过滤您的员工​​列表,然后将其传递给 Select2 小部件。我创建一组独特的员工的方法是这样的:

    $allStaffsGroupOffice = [
        "main office" => [
            2 => "123 123"
        ],
        "office 1" => [
            3 => "staff_1",
            6 => "staff_2",
            2 => "123 123"
        ],
        "office 3" => [
            4 => "staff_3",
            3 => "staff_1"
        ],
        "office 2" => [
            5 => "staff_4",
            3 => "staff_1"
        ]
    ];
    $repeatedStaff = [];
    $newUniqueList = [];
    foreach ($allStaffsGroupOffice as $office => $staffList) {
        foreach ($staffList as $staffId => $staffName) {
            if (!in_array($staffId, $repeatedStaff)) {
                $repeatedStaff[] = $staffId;
                $newUniqueList[$office][$staffId] = $staffName;
            }
        }
    }
    

    $newUniqueList 将是您的新阵列,其中包含拥有独特员工的办公室。

    【讨论】:

    • 问题是同一员工可以出现在 2 个或多个不同的办公室,在 select2 小部件中,员工应该显示在它所在的那些办公室。这样您就可以从任何办公室中选择它
    猜你喜欢
    • 2017-01-18
    • 1970-01-01
    • 2023-03-08
    • 2018-06-18
    • 2020-10-11
    • 2019-05-25
    • 2020-02-25
    • 1970-01-01
    • 2016-02-03
    相关资源
    最近更新 更多