[PHP] Probleem met het (goed) doorlopen van een array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RAJH
  • Registratie: Augustus 2001
  • Niet online
Probleem
Ik heb een selectie vak met daarin de opties ($menuoptions) die ik uit de database haal. Wat ik wil is dat alleen de opties die met de rechten van de gebruiker overeenkomen ($arUserRights) voorgeselecteerd worden. Dit werkt wel, maar nu krijg ik overal opties die vaker voorkomen (wat logisch is in verband met de loop), maar dit is niet de bedoeling ;).

Ik heb geprobeerd om de menuopties die al geweest zijn in een array op te slaan en die te matchen tegen de huidige menuoptie, helaas wil dat niet werken. Ik heb ook al geprobeerd om de array keys die geweest zijn te unsetten, maar ook dat was geen succes.

Weten jullie misschien hoe ik dit het beste op kan lossen? :?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<select id="user-rights" name="rights[]" title="Rechten" multiple="multiple">
<?php
    foreach ($menuoptions as $key => $value)
    {
        $arUserRightsSize = count($arUserRights);
        for ($i = 0; $i < $arUserRightsSize; $i++)
                {
                    if (in_array($value['rights'], $arUserRights[$i]) == true)
                    {
                        echo "<option selected=\"selected\" value=\"". $value['rights'] ."\">". $value['name'] ."</option>\n";
                    }
                    else
                    {
                        echo "<option value=\"". $value['rights'] ."\">". $value['name']. "</option>\n";
                    }
                }
        }
?>
</select>


$menuoptions
Array
(
    [0] => Array
        (
            [id] => 4
            [name] => AOI
            [uri] => /?action=aoi
            [rights] => 5
        )

    [1] => Array
        (
            [id] => 9
            [name] => AQL eindcontrole
            [uri] => /?action=aql-eindcontrole
            [rights] => 10
        )

    [2] => Array
        (
            [id] => 1
            [name] => AQL ingangscontrole
            [uri] => /?action=aql-ingangscontrole
            [rights] => 2
        )

    [3] => Array
        (
            [id] => 2
            [name] => Eerste board controle
            [uri] => /?action=eerste-board-controle
            [rights] => 3
        )
    <--- KNIP --->
)


$arUserRights
Array
(
    [0] => Array
        (
            [rights] => 5
            [name] => AOI
        )

    [1] => Array
        (
            [rights] => 6
            [name] => SMD Touch-up
        )

    [2] => Array
        (
            [rights] => 8
            [name] => Handmontage Touch-up
        )

)

Acties:
  • 0 Henk 'm!

  • RedBeard
  • Registratie: April 2006
  • Niet online
Ik zou zelf aan het volgende denken:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<select id="user-rights" name="rights[]" title="Rechten" multiple="multiple">
<?php
function isSelectedOption($valueToCheck)
{
    $arUserRightsSize = count($arUserRights);
    for ($i = 0; $i < $arUserRightsSize; $i++)
    {
        if (in_array(valueToCheck, $arUserRights[$i]))
        {
            return true;
        }           
    }
    return false;
}
foreach ($menuoptions as $key => $value)
{  
    
    if (isSelectedOption($value['rights']))
    {
        echo "<option selected=\"selected\" value=\"". $value['rights'] ."\">". $value['name'] ."</option>\n";
    }
    else
    {
        echo "<option value=\"". $value['rights'] ."\">". $value['name']. "</option>\n";
    }
    
 }
     
?>
</select>


Ik heb hier geen machine met php erop staan dus niet kunnen testen of iets, maar het lijkt me dat dit zou moeten werken

I'm not anti-social, I'm just not user friendly


Acties:
  • 0 Henk 'm!

  • RAJH
  • Registratie: Augustus 2001
  • Niet online
Bedankt RedBeard,

het probleem is opgelost _/-\o_