Mikee: PHP Multiarray in Array umwandeln

Hallöchen

Ich habe folgenden zweidimensionalen Array:

  
$data[] = array(  
  "x"	=> $raw_data_x,	 //x- acceleration  
  "y"	=> $raw_data_y,	 //y- acceleration  
  "z"	=> $raw_data_z); //z- acceleration  

Mit ein paar Tausend Datenpunkten in $data[].

Ich brauche nun einen Array mit allen x-Werten. Intuitiv schreibe ich immer:

  
$xdata=$data[]["x"];  

Geht aber nicht. Gibt es eine einfache Variante diesen $xdata array zu erzeugen, ohne einen Loop zu programmieren?

Sorry, falls es offensichtlich ist, aber ich habe mir schon die Finger wund gesucht.

  1. Hi,

    $data[] = array(
      "x" => $raw_data_x, //x- acceleration
      "y" => $raw_data_y, //y- acceleration
      "z" => $raw_data_z); //z- acceleration

    
    > Mit ein paar Tausend Datenpunkten in $data[].  
    >   
    > Ich brauche nun einen Array mit allen x-Werten. Intuitiv schreibe ich immer:  
    >   
    > ~~~php
      
    
    > $xdata=$data[]["x"];  
    > 
    
    

    Geht aber nicht.

    Natürlich nicht, und *das* sollte dir auch intuitiv klar sein - $array[] ist die Syntax zum Anlegen eines neuen Elements; lesend kannst du damit nicht zugreifen (weil dann gar nicht klar ist, welches Element du lesen willst).

    Gibt es eine einfache Variante diesen $xdata array zu erzeugen, ohne einen Loop zu programmieren?

    Bspw.:
    $data = array_map(function($e) { return $e['x']; }, $data);

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hallo,

      Bspw.:
      $data = array_map(function($e) { return $e['x']; }, $data);

      ...mit PHP ab v5.3. Ansonsten

      $xdata = $data['x'];

      Gruß Alexander.

      1. Hi Alexander,!

        $xdata = $data['x'];

        Notice: Undefined index: x in script.php on line X

        Interessant wäre die Frage, was der Fragesteller eigentlich mit den X-Werten vorhat. Also: Mikee, was hast du mit X-Werten vor? =)

        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:)
        1. Hi Alexander,!

          $xdata = $data['x'];
          Notice: Undefined index: x in script.php on line X

          Interessant wäre die Frage, was der Fragesteller eigentlich mit den X-Werten vorhat. Also: Mikee, was hast du mit X-Werten vor? =)

          MfG H☼psel

          Danke allen Antwortern!

          Ich merke, dass es ohne irgend einen "Loop" nicht geht, die array_map Variante kannte ich aber nicht, dankeschön!

          Zur Frage wieso ich das brauch: die x/y/z Beschleunigungswerte lese ich auch einem CSV Exportfiles eines Beschleunigungssensors (jede 1/10s einen Wert). Ich mache einerseits diverse Berechnungen damit und stelle die Resultate dar. Im konkreten Fall wollte ich die x (oder wahlweise y, z) Werte an meine Plotfunktion übergeben, die nur eindimensionale Arrays annimmt.

          Grüsschen

          Michael

    2. Lieber ChrisB,

      Bspw.:
      $data = array_map(function($e) { return $e['x']; }, $data);

      aha, mit einer anonymen Funktion... aber unterhalb von PHP5.3 braucht es wohl eher diesen Weg:

      $xdata = array();  
      foreach ($data as $v) {  
          $xdata[] = $v['x'];  
      }
      

      Liebe Grüße,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  2. Hi,

    Mit ein paar Tausend Datenpunkten in $data[].

    wo jetzt, in $data[] oder in $data? Sprich, besitzt das [n]te Element von $data 1000de Unterpunkte oder beinhaltet $data selber 1000de Elemente?

    Gibt es eine einfache Variante diesen $xdata array zu erzeugen, ohne einen Loop zu programmieren?

    Ein Loop _ist_ die einfachste Variante, um durch 1000de Elemente zu iterieren, es sei denn Du wendest Methoden an, die jedes Element eines Arrays bearbeiten (wie ja bereits erwähnt, ergänzend hier array_walk).

    Oder möchtest Du alles tippen:
    $xdata =  array(
        $data[0]["x"],
        $data[1]["x"],
        .
        .
        .
        $data[1000]["x"],
    }
    ;-)

    Gruesse, Joachim

    --
    Am Ende wird alles gut.