Stefan: wiedereinmal js arrays und php

sorry dass ich euch schon wieder brauche! ;-P

ich habe aufgrund von der hilfe hier etwas zusammengebastelt das auch funktioniert. jedoch ist es etwas ünschön bzw. ich würde es gerne etwas anders haben. bisher sieht es so:

  
<script type="text/javascript">  
[code lang=php]  
<?php  
	if (isset($_SESSION['stored'])) {  
		foreach ($_SESSION['stored'] as $bla) {  
			echo 'changeColor(\''.$bla.'\');';  
		}  
	}  
?>  

</script>
[/code]

das gibt jetz im browser einfach mehrere funktionsaufrüfe. jedoch würde ich gerne nur einen funktionsaufruf haben beim seitenload und direkt eher in der js funktion die aufgerufen wird eine schleife abarbeiten lassen wollen. also weniger php code und mehr js code. weil 10 fktsaufrufe find ich nich gerade schön. kann ich nicht einfach das array von der session an die js funktion übergeben und die läuft das dort in der schleife durch und macht was es soll?

so ungefähr hätt ich mir das gedacht. beim seitenlaod wird einfach die session (array) von php mittels echo an die js funktion übergeben. die js funktion ruft dann die alte (schon bestehende fkt) auf und dort nur eben mit ner schleife.

denke den teil im .js doku ist mir klar. so ungefähr hätt ichs mir gedacht:

  
function loadColor (arrayDate) {  
	for (var i = 0; i < arrayDate.length; i++) {  
		changeColor(arrayDate[i]);  
	}  
};  

aber beim aufruf happerts. wie kann ich dieser funktion das array übergeben? also irgendwie sowas wie:

  
<script type="text/javascript">  
var phparray = <?php echo $_SESSION['stored']; ?>;  
loadColor (phparray);  
</script>  

was mach ich falsch bzw. wie gehts richtig? liegt es daran das ich von php kein array übergeben kann sondern dort auf jeden fall ne schleife brauche um alle werte des php arrays zu übergeben?

danke euch;
lg stefan

  1. hi,

    <script type="text/javascript">
    var phparray = <?php echo $_SESSION['stored']; ?>;
    loadColor (phparray);
    </script>

      
    Es gibt eine Funktion [json_encode()](http://de2.php.net/json_encode), die ein PHP Objekt entgegen nimmt und dieses in JavaScript (bzw. JSON) umwandelt.  
      
    Also  
      
    var phparray = <?php echo json\_encode($\_SESSION['stored']) ?>;  
      
    sollte dich deinem Ziel zumindest näher bringen.  
      
    Ich weiß leider nicht, wie genau diese Methode mit solchen Arrays umgeht.  
      
    Gruß!
    
    1. hi danke euch zweien!!

      hat mich schon weiter gebracht. zumindest das was hopsel mir gezeigt hat konnte ich umsetzten und es funktioniert nun. nur allerdings ist das auch nicht der wahnsinn! ;-P

      nun habe ich ein php array welches ich mittels einer schleife in ein js array umwandle um dann wieder mittels einer schleife dieses array abarbeiten zu lassen. naja zwei schleifen. zu vor hatte ich ja eine php schleife um das ganze zu bewerkstelligen. also von dem her schon mal etwas anschaulicher. jedoch gefiel mir ja an meiner variante nicht dass dann zig mal ein fkt aufruf gestartet wird (also im quelltext stehen dann zig mal der fkt aufruf mit halt anderen paramatern). was im quelltext eig. steht kann mir ja egal sein aber es geht mir hierbei ums prinzip bzw. um was zu lernen. ich würde einfach gerne das php array and die js fkt schicken und dort die schleife machen also von php schleife mit vielen js fkt aufrufen zu einem js fkt aufruf und dort der js schleife.

      mit dem ansatz von christian schein ich dem schon wirklich näher zu kommen. hab mir da auch die doku von dem json angeschaut aber leider bekomme ich das nich hin. kann mir da jemand weiterhelfen wie ich das mache?

      also konkret. wie bekomme ich mittels json(natürlich wenns geht auch anders nur eben nich mit noch ner zusätzlichen schleife) aus nem php array nen js array?

      sprich:
      aus dem:

      $colors = array();
      foreach($_SESSION['stored'] as $color)
        $colors[] = "'".$color."'";
      echo 'loadColor (['.implode(',',$colors).'])';

      soll das werden aber funktionierend und gleich:

      var phparray = <?php echo json_encode($_SESSION['stored']) ?>;
      loadColor (phparray);

      lg stefan

      1. Hi Stefan!

        also konkret. wie bekomme ich mittels json(natürlich wenns geht auch anders nur eben nich mit noch ner zusätzlichen schleife) aus nem php array nen js array?

        Das hast du doch schon. Allerdings bleiben die Schlüssel auch so erhalten, wie sie in $_SESSION['stored'] stehen: Es sind also Zeichenketten.

        Wenn du das nicht möchtest, dann lege ein herkömmliches™ Array an, das mit 0 beginnt.

        Ansonsten: Was hindert dich daran, eine eigene Funkion zu schreiben? json_encode muss auch in einer Schleife über alle Array-Elemente iterieren.

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
  2. Hi Stefan!

    aber beim aufruf happerts. wie kann ich dieser funktion das array übergeben?

    Relativ einfach:

    $colors = array();  
    foreach($_SESSION['stored'] as $color)  
      $colors[] = "'".$color."'";  
    echo 'loadColor (['.implode(',',$colors).'])';
    

    Um einer Javascript-Funktion ein Array zu übergeben, musst du also einen String generieren, der folgendermaßen aufgebaut ist:
    ['foo','bar','foobar']

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)