Avatar billede Morten Nybegynder
09. juli 2007 - 12:35 Der er 14 kommentarer

php array

Hej

Jeg sidder her og "fidler" med et script hente hos roeving (http://roenving.users.whitehat.dk/) men er gået kold.

Det jeg skal er at fylde to mysql tabeller, via php, ind i dette scipt, er der ikke en rar sjæl som vil vise mig syntaxen:

<script language="javascript" type="text/javascript">
var arr = [
   
   
    ["Valg 1",[
        ["2. valg 1 (1)",
            ["3. valg 1 (1-1)","3. valg 2 (1-1)","3. valg 3 (1-1)","3. valg 4 (1-1)"]],
        ["2. valg 2 (1)",
            ["3. valg 1 (1-2)","3. valg 2 (1-2)","3. valg 3 (1-2)"]],
        ["2. valg 3 (1)",
            ["3. valg 1 (1-3)","3. valg 2 (1-3)","3. valg 3 (1-3)","3. valg 4 (1-3)"]]]],
    ["Valg 2",[
        ["2. valg 1 (2)",
            ["3. valg 1 (2-1)","3. valg 2 (2-1)","3. valg 3 (2-1)","3. valg 4 (2-1)"]],
        ["2. valg 2 (2)",
            ["3. valg 1 (2-2)","3. valg 2 (2-2)"]],
        ["2. valg 3 (2)",
            ["3. valg 1 (2-3)","3. valg 2 (2-3)","3. valg 3 (2-3)","3. valg 4 (2-3)","3. valg 5 (2-3)","3. valg 6 (2-3)","3. valg 7 (2-3)","3. valg 8 (2-3)","3. valg 9 (2-3)","3. valg 10 (2-3)","3. valg 11 (2-3)","3. valg 12 (2-3)","3. valg 13 (2-3)","3. valg 14 (2-3)","3. valg 15 (2-3)","3. valg 16 (2-3)","3. valg 17 (2-3)","3. valg 18 (2-3)","3. valg 19 (2-3)","3. valg 20 (2-3)","3. valg 21 (2-3)"]],
        ["2. valg 4 (2)",
            ["3. valg 1 (2-4)","3. valg 2 (2-4)","3. valg 3 (2-4)","3. valg 4 (2-4)"]]]],
    ["Valg 3",[
        ["2. valg 1 (3)",
            ["3. valg 1 (3-1)","3. valg 2 (3-1)","3. valg 3 (3-1)"]],
        ["2. valg 2 (3)",
            ["3. valg 1 (3-2)","3. valg 2 (3-2)","3. valg 3 (3-2)"]],
        ["2. valg 3 (3)",
            ["3. valg 1 (3-3)","3. valg 2 (3-3)","3. valg 3 (3-3)"]],
        ["2. valg 4 (3)",
            ["3. valg 1 (3-4)","3. valg 2 (3-4)","3. valg 3 (3-4)"]],
        ["2. valg 5 (3)",
            ["3. valg 1 (3-5)","3. valg 2 (3-5)","3. valg 3 (3-5)"]]]]
];
//alert(arr1[1][1])
function initSels(){
    createOpts(document.getElementById('sel1'));
//    createOpts(document.getElementById('sel3'));
}

function createOpts(sel){
    var s = new Array();
    var num = 0, txt = "arr";
    var ar = opt = null;
    var n = sel.selectedIndex;
    var args = createOpts.arguments.length;
    for(var i=1;args>i;i++){
        s[i-1] = document.getElementById(createOpts.arguments[i]);
        if(s[i-1]==sel)num=i;
    }
    if(args>1){
        if(s[num])sel = s[num];
        else return;
    }
    if(n==0&&args>1){
        for(i=num;args>i+1;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
        return true
    };
    for(i=0;num>i;i++){
        txt+="["+(s[i].selectedIndex-1)+"][1]";
    }
    ar = eval(txt);
    sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
    for(i=0;ar.length>i;i++){
        opt = document.createElement('OPTION');
        sel.appendChild(opt);
        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }
    }
    if(args>num+2){
        for(i=num+1;args-1>i;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
    }
}
</script>

Det er altså var arr - jeg skal have hældt mine data fra de to tabeller over i....
Avatar billede Morten Nybegynder
09. juli 2007 - 12:37 #1
Jeg har kun 2 dropdowns og kun 2 niveauer
Avatar billede Morten Nybegynder
09. juli 2007 - 13:26 #2
Nu har jeg fået lavet min Multidim. PHP array og det ligger i $valg - hvordan "konventerer" jeg det til et multi JS array ?????
Avatar billede Morten Nybegynder
09. juli 2007 - 13:42 #3
Nå nu er jeg nået frem til dette (som ikke giver nogen JS fejl) men der kommer ingenting i min Dropdown... hmmmmm

<script language="javascript" type="text/javascript">
var arr = new Array();
<?php
$j = 0;
for($i=0;$i<$array.length;$i++){
  echo "arr[$i] = [$array[$i][0],$array[$i][1],$array[$i][2],$array[$i][3]];";
}
?>

   
//alert(arr1[1][1])
function initSels(){
    createOpts(document.getElementById('sel1'));
}

function createOpts(sel){
    var s = new Array();
    var num = 0, txt = "arr";
    var ar = opt = null;
    var n = sel.selectedIndex;
    var args = createOpts.arguments.length;
    for(var i=1;args>i;i++){
        s[i-1] = document.getElementById(createOpts.arguments[i]);
        if(s[i-1]==sel)num=i;
    }
    if(args>1){
        if(s[num])sel = s[num];
        else return;
    }
    if(n==0&&args>1){
        for(i=num;args>i+1;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
        return true
    };
    for(i=0;num>i;i++){
        txt+="["+(s[i].selectedIndex-1)+"][1]";
    }
    ar = eval(txt);
    sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
    for(i=0;ar.length>i;i++){
        opt = document.createElement('OPTION');
        sel.appendChild(opt);
        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }
    }
    if(args>num+2){
        for(i=num+1;args-1>i;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
    }
}
</script>
Avatar billede Morten Nybegynder
09. juli 2007 - 13:43 #4
$j i starten skal bare glemmes... ;O)
Avatar billede Morten Nybegynder
09. juli 2007 - 15:21 #5
og når vi nu er igang - kan javascriptet så laves sådan at jeg kan have flere dropdownboxe med andre Arrays...?
Avatar billede Morten Nybegynder
09. juli 2007 - 21:55 #6
Nå nu nåede jeg et stykke mere - nu har jeg fået den til at skrive i den første dropdownbox - men mangler stadig værdierne til den anden - her er det stykke php kode jeg har brugt til at læse fra PHP til JS:

<?php
function phpArrayToJsArray($name,$array,$prePend='var ')
{
    if (is_array($array)) { // Array recursion
        $result = $name.' = new Array();'."\n";
        foreach ($array as $key => $value) {
          $result .= phpArrayToJsArray($name.'["'.$key.'"]',$value,'');
        }
    } else {  // Base case of recursion
        $result = $name.' = "'.$array.'";'."\n";
    }
    return $prePend.$result;
}

    echo phpArrayToJsArray(arr, $valg);

?>

Men jeg mangler altså værdier til den anden dropdownbox... er i alle taget på ferie..?? loooooool
Avatar billede Morten Nybegynder
09. juli 2007 - 21:58 #7
Her er hvad mit php array indeholder:

Array ( [0] => Telia [Telia] => Array ( [0] => Business On [1] => Mobiz ) [1] => 3 [2] => Sonofon [3] => TDC )
Avatar billede Morten Nybegynder
09. juli 2007 - 22:35 #8
og sådan her skal det bare se ud når det er overført til JS:

var arr = [
                ["Telia",
                    [
                        ["Mobiz"],
                        ["Business"]
                    ],
                ],
                ["3",
                    [
                        ["1 mbit"],
                        ["1.5 mbit"],
                        ["3G"]
                    ],
                ],
                ["Sonofon",
                    [
                        ["Erhverv Basis"],
                        ["Erhverv Plus"]
                    ]
                ]
            ];

Jeg laver det manuelt for nu men høre meget gerne hvordan jeg overføre min PHP array til JS....
Avatar billede Morten Nybegynder
10. juli 2007 - 01:06 #9
Nå men når i alle bare er på ferie og ikke gider hjælpe så har jeg lavet det på min egen kluntede måde og den kommer her - så kan andre måske bruge den... jeg lader forøvrigt spørgsmålet stå åben - vil meget gerne have den "rigtige" måde at kopierer et multidimensionelt PHP Array til JS Array så denne funktion virker....

Nå men her er min kode:

    $i = 1;
    $j = 1;
    $js_txt = "[ ";
    while($selskab = mysql_fetch_array($ope_query)){
        if($j == 1){
                $js_txt .= "[\"".$selskab['navn']."\",[";
                $j++;
            }else{
                $js_txt .= ",[\"".$selskab['navn']."\",[";
            }
            $abn_sql = "SELECT * FROM sgdb_telefoni_abn WHERE oper_id = ".$selskab[id]." ";
            $abn_query = mysql_query($abn_sql,$connection) or die(mysql_error());
           
            while($abonnement = mysql_fetch_array($abn_query)){
                if($i == 1){
                        $js_txt .= "[\"".$abonnement['abonnement']."\"]";
                        $i++;
                    }else{               
                        $js_txt .= ",[\"".$abonnement['abonnement']."\"]";
                    }
                }
            $i=1;
            $js_txt .= "]]";   
       
        }
        $js_txt .= "];";

<script language="javascript" type="text/javascript">

var arr = <?php echo $js_txt; ?>

   
//alert(arr1[1][1])
function initSels(){
    createOpts(document.getElementById('sel1'));
}

function createOpts(sel){
    var s = new Array();
    var num = 0, txt = "arr";
    var ar = opt = null;
    var n = sel.selectedIndex;
    var args = createOpts.arguments.length;
    for(var i=1;args>i;i++){
        s[i-1] = document.getElementById(createOpts.arguments[i]);
        if(s[i-1]==sel)num=i;
    }
    if(args>1){
        if(s[num])sel = s[num];
        else return;
    }
    if(n==0&&args>1){
        for(i=num;args>i+1;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
        return true
    };
    for(i=0;num>i;i++){
        txt+="["+(s[i].selectedIndex-1)+"][1]";
    }
    ar = eval(txt);
    sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
    for(i=0;ar.length>i;i++){
        opt = document.createElement('OPTION');
        sel.appendChild(opt);
        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }
    }
    if(args>num+2){
        for(i=num+1;args-1>i;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
    }
}
</script>
Avatar billede roenving Novice
10. juli 2007 - 10:44 #10
Hvis du kun skal have 2 niveauer er mit script klart overkill, gør i stedet, som du kan finde det i denne tråd: http://www.eksperten.dk/spm/615326 !-)
Avatar billede Morten Nybegynder
10. juli 2007 - 12:02 #11
Ok - anyway - kan du ikke vise mig hvordan jeg overføre arrayet (multidim)?
Avatar billede Morten Nybegynder
12. juli 2007 - 22:59 #12
Hej.. den du henviser til virker ikke særlig dynamisk - kan jeg ikke få dig til at hjælpe mig med et eks. hvor jeg henter alle værdier fra en db via php lægger dem over i js arrays og får det til at virke??
Avatar billede Morten Nybegynder
12. juli 2007 - 23:01 #13
Vil lige bemærke at jeg i min db har en id og en beskrivelse og vil selvfølelig gerne have det sådan at værdien på selecten er lig id og teksten som brugeren ser er beskrivelsen... (derfor mit problem med den du har på din side som jeg godt kan få til at virke hvis jeg bare kun havde f.eks. beskrivelsen - så egentlig søger jeg bare en "lille biite" omskrivning af eks. fra din side....) smider gerne 100 point mere i puljen .....
Avatar billede roenving Novice
18. juli 2007 - 23:59 #14
Jeg kan ikke hjælpe dig med php-koden, men ellers kan du se en mulighed i http://www.eksperten.dk/spm/787272 !-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester