Ankündigung

Einklappen
Keine Ankündigung bisher.

Position im Array in andern speichern

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Position im Array in andern speichern

    Moin,

    ich bin hier gerade neu und habe vor einiger Zeit mit der PHP-Programmierung angefangen.
    Nun habe ich ein Problem:
    Ich habe einen x-Vektor-array und y-vektor-array. Nun sollen zum Beispiel alle Werte von x zwischen 3 und 9 rausgesucht werden und die passenden/zugehörigen y-Werte in einen Array gespeichert werden.
    Und dann mit Scatterplot die Werte darstellen.
    Ich habe schon einiges probiert, nur leider noch nicht zum richtigen ergebniss gekommen. Mit matlab ging das wunderbar. Nur die Umstellung bekomme ich noch nicht so ganz hin...
    Mein Versuch:

    $ydata = array(74,3,30,12,9,23,50,13,5,7);
    $xdata = array(11,3,8,12,9,1,9,13,5,7);
    foreach($xdata as &$value){
    for($value > 3; $value <9){
    $pos = key($value);
    $ywert = $xdata[$pos];
    $c = array();
    $c = array_push($ywert);
    }
    }

    Über Hilfe würde ich mich sehr freuen,

    Gruß Tim


  • #2
    Verwende bitte die php-BB-Code-Tags um PHP-Code darzustellen.

    So etwas wie
    PHP-Code:
    for ($value 3$value 9
    gibt es in PHP nicht.

    In PHP hat jedes Array einen Index und einen Wert. Iterieren kannst du über alle Elemente wie folgt:
    PHP-Code:
    foreach ($anArray as $key => $value) {
    }
    foreach (
    $anArray as $value) {

    Dabei gibt es noch "bessere"/schnellere Varianten wie array_walk(), die jedoch für deinen Wissenstand etwas zu hoch sind.

    Dein Script könnte etwa so aussehen:
    PHP-Code:
    $data = array(
      
    'x' => array(7335),
      
    'y' => array(123)
    )

    $lookupResult = array();
    foreach (
    $data['x'] as $index => $xValue) {
      if (
    $xValue and $xValue 9) {
         
    $lookupResult[] = array(
            
    'x' => $xValue,
            
    'y' => $data['y'][$index]
         )
      }
    }
    var_dump($lookupResult); 
    GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

    Kommentar


    • #3
      ok, vielen Dank schon mal.
      Nur frage ich mich gerade wie dann die Ausgabe aussieht bzw. die Komponenten für den Plot...

      PHP-Code:
      $line=new ScatterPlot('y','x');
      $line->mark->SetType(MARK_X);
      $line->mark->SetColor('green');
      $line->mark->SetWidth(4);
      $graph->Add($line);
      $graph->Stroke(); 
      oder eher...
      PHP-Code:
      $line=new ScatterPlot($data['y'],$data['x']);... 

      Kommentar


      • #4
        Das ist schwierig zu sagen - ich habe keine Ahnung, was ScatterPlot ist bzw. was es überhaupt tut.

        In $data['x'] sind die ganzen X-Werte gespeichert, in $data['y'] die ganzen Y-Werte. Das ist ein mehrdimensionales Array, das lässt sich gut mit einer Matrix vergleichen.
        GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

        Kommentar


        • #5
          Ok, Scatterplot ist an sich nur eine Art von Plot.

          Und über welchen Syntax bekomme ich die eben neu eingegrenzten Werte?
          über:
          PHP-Code:
          $lookupResult['y'

          Und ist das so richtig? Muss es nun immer ein ' oder " sein?

          PHP-Code:
              $data = array(
              
          "x" => array(11,3,8,12,9,1,9,13,5,7),
              
          "y" => array(74,3,30,12,9,23,50,13,5,7)
              );

              
          $lookupResult = array();
              
              foreach(
          $data["x"] as $index => $xValue)
              {
              if (
          $xValue and $xValue <9){
              
          $lookupResult[] = array(
              
          "x" => $xValue,
              
          "y" => $data["y"][$index]
              )
              }
              }
              
          var_dump($lookupResult); 
          Weil bei mir zeigt er immer einen fehler an.

          Kommentar


          • #6
            Ob ' oder " ist oft Geschmakssache. Für mich ist ' besser weil es nur das Drücken von einer Taste erfordert im Gegensatz zu ".

            Einen Unterschied gibt es schon:
            PHP-Code:
            $x 13;
            $test = array();
            $test['$x'] = true;
            var_dump($test);
            $test["$x"] = true;
            var_dump($test); 
            Wenn du dier $lookupResult ansiehst (das var_dump() davon) siehst du die Struktur davon. Es speichert für einen Index n die jeweiligen x und y-Werte. Wenn du den Index des Daten-Arrays im Lookup-Result noch benötigst kannst du das ja einbauen:
            PHP-Code:
            $lookupResult[$index] = array(...); 
            Ich bitte dich zudem, entsprechend des PEAR Coding Standard einzurücken: http://pear.php.net/manual/en/standards.php . Ansonsten ist hier schnell einmal fertig mit Support.
            GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

            Kommentar


            • #7
              Weil bei mir zeigt er immer einen fehler an.
              Die Fehlermeldungen bitte immer mitposten wenn du von welchen berichtest, sonst können wir damit nur wenig anfangen.

              Für mich ist ' besser weil es nur das Drücken von einer Taste erfordert im Gegensatz zu ".
              Also ich brauch für beide 2 Tasten. Find ' aber auch generell besser, wenn ich Variablen an nen String knüpf wird mir der Vorgang dadurch bewusster..
              Relax, you're doing fine.
              RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

              Kommentar


              • #8
                Zitat von Kouzkovy Beitrag anzeigen
                Weil bei mir zeigt er immer einen fehler an.
                Die Fehlerausschrift sagt dir doch wo der Fehler liegt.
                Wenn da steht
                Dein Script könnte etwa so aussehen
                kann sich schon mal ein Tippfehler einschleichen (oder ist Absicht ).
                PHP-Klassen auf github

                Kommentar


                • #9
                  Ja, da fehlt (unabsichtlich) ein Zeichen... Hier im Board zu coden ist manchmal gar nicht so leicht.
                  GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

                  Kommentar


                  • #10
                    Ich bitte dich zudem, entsprechend des PEAR Coding Standard einzurücken: http://pear.php.net/manual/en/standards.php . Ansonsten ist hier schnell einmal fertig mit Support.
                    ok, werde mich in zukunft daran halten...

                    Die Fehlermeldung wird bei mir nicht angeziegt. Nur ein kleines rotes Kreuz ohne Text.
                    Fehlermeldungen wurden anscheinend ausgeblendet. Das kann ich aber nicht mehr ändern, da mein Code nur Teil eines Großen ist...

                    Ich finde den Fehler auch nicht in meinem Code, könnte mich bitte jemand drauf hinweisen.

                    Kommentar


                    • #11
                      Ich habe einen x-Vektor-array und y-vektor-array. Nun sollen zum Beispiel alle Werte von x zwischen 3 und 9 rausgesucht werden und die passenden/zugehörigen y-Werte in einen Array gespeichert werden.
                      Dann solltes du eventuell bereits deine Datenstrukturen entsprechend anlegen, denn das ist alles andere als optimal:
                      PHP-Code:
                      $ydata = array(74,3,30,12,9,23,50,13,5,7);
                      $xdata = array(11,3,8,12,9,1,9,13,5,7); 
                      Besser wäre folgendes, schon alleine weil man die korrespondieren X und Y Werte räumlich zueinander legt:
                      PHP-Code:
                      $values = array(
                        array(
                      'x' => 72'y' =>11),
                        array(
                      'x' => 3'y' => 3),
                        array(
                      'x' => 30'y' => 8),
                        
                      // usw.
                      ); 
                      Falls die X Werte eindeutig sind, also keine doppelten X Werte auftreten, kannst du dir auch noch anders behelfen.
                      PHP-Code:
                      $ydata = array(74,3,30,12,9,23,50,13,5,7);
                      $xdata = array(11,3,8,12,9,1,9,13,5,7);

                      $result array_combine($xdata$ydata); 
                      Nach dem array_combine sind die X Werte im Schlüssel und die entsprechenden Y Werte im Value:
                      PHP-Code:
                      foreach ($result as $x => $y) {
                        
                      // $x und $y liegen nun gemeinsam vor...

                      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                      Kommentar


                      • #12
                        Habe nun meine Datenstruktur angepasst.

                        Jetzt bekomme ich sogar mal eine Fehlermeldung. Ich nutze JPGraph zum Darstellen der Funktionswerte. Der Fehler lautet: JPGraph Error 25044: Cannot use auto scaling since it is imposssible a valid min/max value of the Y-Axis (only null values).
                        Bei mir hat y aber einen wert...

                        Mein Code lautet nun:
                        PHP-Code:
                         $ydata = array(7335,8,7,6,5,20);
                         
                        $xdata = array(123,6,4,10,22,24);

                         
                        $result array_combine($xdata$ydata);

                        $lookupResult = array();
                        foreach (
                        $result as $x => $y) {
                          if (
                        $x and $x 12) {
                             
                        $lookupResult = array(
                                
                        'x' => $x,
                                
                        'y' => $y
                             
                        );
                          }
                        }
                        $line=new ScatterPlot($lookupResult['y'],$lookupResult['x']);
                        $line->mark->SetType(MARK_X);
                        $line->mark->SetColor('blue');
                        $line->mark->SetWidth(4);
                        $graph->Add($line); 

                        Kommentar


                        • #13
                          PHP-Code:
                          foreach ($result as $x => $y) { 
                            if (
                          $x and $x 12) { 
                               
                          $lookupResult = array( 
                                  
                          'x' => $x
                                  
                          'y' => $y 
                               
                          ); 
                            } 

                          $loopResult wird jedesmal überschrieben und enthält am Ende nur ein X/Y Päärchen...
                          Füge weitere Daten einem Array hinzu, indem du die eckigen Klammern angibst:
                          PHP-Code:
                          $lookupResult[] = array( 
                          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                          Kommentar


                          • #14
                            Vielen Dank, den fehler zeigt er schon mal nicht wieder an...
                            Dafür jetzt aber nen anderen.
                            JPGraph 25121: Empty input data array specified for plot. Must have at least one data point.

                            hier der verbesserte Code nochmal:

                            PHP-Code:

                              $ydata 
                            = array(1065,8,7,6,5,20);
                              
                            $xdata = array(456,7,9,10,22,24);

                             
                            $result array_combine($xdata$ydata);

                            $lookupResult = array();
                            foreach (
                            $result as $x => $y) {
                              if (
                            $x and $x 12) {
                                 
                            $lookupResult[] = array(
                                    
                            'x' => $x,
                                    
                            'y' => $y
                                 
                            );
                              }
                            }
                            $line=new ScatterPlot($lookupResult['y'],$lookupResult['x']);
                            $line->mark->SetType(MARK_X);
                            $line->mark->SetColor('blue');
                            $line->mark->SetWidth(4);
                            $graph->Add($line); 

                            Kommentar


                            • #15
                              PHP-Code:
                              $lookupResult[] = array( 
                                      
                              'x' => $x
                                      
                              'y' => $y 
                                   
                              ); 

                              // ...

                              $line=new ScatterPlot($lookupResult['y'],$lookupResult['x']); 
                              Du erstellst oben doch ein mehrdim. Array. Lass dir mir print_r() oder var_dump() $lookupResult ausgeben dann siehst du was enthalten ist.

                              LG
                              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                              PHP.de Wissenssammlung | Kein Support per PN

                              Kommentar

                              Lädt...
                              X