ArrayHash do Array pro kontrolu jedinečnosti

Klobasa
Člen | 16
+
0
-

Ahoj,
ve formuláři mám 5 selectboxů, do kterých se přidávají jména z databáze a zároveň potřebuji, aby při výběru shodných jmén nešlo jít dále (přes addError). Našel jsem na array metodu array_unique(), jenže jsem zjistil, že formulář vrací arrayHash.

Potřebuji tedy:

  • buď převést arrayHash na Array
  • nebo zkontrolovat jedinečnost obsahu přímo v arrayHashi

Díky za rady :)

JZechy
Člen | 161
+
+1
-

@Klobasa Když dáš metodě getValues() parametr true, dostaneš hodnoty jako obyčejné pole.

h4kuna
Backer | 740
+
0
-

Úplně jsem nepochopil co v těch selectboxech máš, nette samo kontroluje aby ti tam nepřišli blbosti. ArrayHash jde velmi lehce přetypovat na pole.

dump((array) $values['selectbox1']);

A pokud opravdu chceš pole tak to jde:

dump($form->getValues(TRUE));
Hug0
Člen | 35
+
+1
-

Ahoj,
jestli chápu správně tak máš něco jako:

<?php
    public function createComponentTestForm(): Form
    {
        $form = new Form;

        $names = [
            'name1' => 'name1',
            'name2' => 'name2',
            'name3' => 'name3',
            'name4' => 'name4',
            'name5' => 'name5',
        ];

        $form->addSelect('val1', 'names:', $names);
        $form->addSelect('val2', 'names:', $names);
        $form->addSelect('val3', 'names:', $names);
        $form->addSelect('val4', 'names:', $names);
        $form->addSelect('val5', 'names:', $names);
        $form->addSubmit('submit', 'submit');

        $form->onSuccess[] = function(Form $form, ArrayHash $values) {

        };

        return $form;
    }
?>

Co potom pro kontrolu použít array_flip?

<?php
        $form->onSuccess[] = function(Form $form, ArrayHash $values){
            if (count(array_flip((array) $values)) !== $values->count())
            {
                $form->addError('Error...');
            }
        };
?>

Editoval Hug0 (21. 6. 2017 9:19)