Ankündigung

Einklappen
Keine Ankündigung bisher.

Werte aus einem Array in einem weiteren Array speichern?

Einklappen

Neue Werbung 2019

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

  • Werte aus einem Array in einem weiteren Array speichern?

    Hallo Leute! Ich versuche verzweifelt die Werte aus einer Sprachdatei:

    PHP-Code:
       $lang = array();     $lang['number_1'] = 'eins';     $lang['number_2'] = 'zwei';     $lang['number_3'] = 'drei'
    In einem weiteren Array zu verwenden:
    PHP-Code:
       $words = array($lang['number_1'], "zwei""drei"); 
    Dies hier ist nur einer von vielen Fehlversuchen...als Antwort erhalte ich:

    Notice: Undefined variable: lang in [...]
    Google spuckt mir nach langer Suche nicht das aus was ich brauche, hoffe nun dass Ihr mir helfen könnt. Danke!


  • #2
    Dann zeig uns den kompletten Code, bei dem was du uns zeigst tritt kein Fehler auf:
    https://eval.in/919100

    Kommentar


    • #3
      Zitat von ChromOxid Beitrag anzeigen
      Dann zeig uns den kompletten Code, bei dem was du uns zeigst tritt kein Fehler auf:
      https://eval.in/919100
      Ja natürlich...ich hoffe nur dass meine Formatierung leserlich genug ist...

      Code:
      <?php
                          function getCaptureCalculationText()
                          {
                              $num = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
                              $words = array( $lang['captcha_1'], $lang['captcha_2'], $lang['captcha_3'], "vier", "fünf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zwölf", "dreizehn");
                              mt_srand((double)microtime() * 1000000);
                              $first = mt_rand(0, 12);
                              $second = mt_rand(0, 12);
                              if (mt_rand(0, 1) == 0 || $first < $second)
                              {
                                  $result = $num[$first] + $num[$second];
                                  $showcode = $words[$first] . " + " . $words[$second] . " = ";
                              }
                              else
                              {
                                  $result = $num[$first] - $num[$second];
                                  $showcode = $words[$first] . " - " . $words[$second] . " = ";
                              }
                              $_SESSION['myCalculationCapture'] = $result;
                              return $showcode;
                          }
                          if (isset($_POST['special_message']) && $_SESSION['myCalculationCapture'] == $_POST['special_message'])
                          {
                              $formErrors['captcha'] = false;
                          }
                          else
                          {
                              $formErrors['captcha'] = true;
                          }
                      ?>

      Kommentar


      • #4
        Deine $lang - Variable ist nicht in der Funktion getCaptureCalculationText() definiert. Übergib sie am Besten als Parameter.

        Kommentar


        • #5
          Zitat von michga93 Beitrag anzeigen
          Deine $lang - Variable ist nicht in der Funktion getCaptureCalculationText() definiert. Übergib sie am Besten als Parameter.
          Habe ich nun versucht und mich irgendwie von Fehlermeldung zu Fehlermeldung vorgearbeitet.
          Bekomme nun Meldungen wie
          Warning: Illegal string offset 'captcha_1' in [...]
          Notice: Uninitialized string offset: 0 in [...]
          Nach vielem probieren sieht es am Anfang der Funktion so aus:
          Code:
                              if( is_array($lang) && $lang['index'] !== '' )
                              {
                                  function getCaptureCalculationText($lang = '')
                                  {
          War auch wieder falsch, bekomme dann:
          Notice: Undefined index: index in [...]
          Aber was gebe ich anstelle von 'index' an?
          Mache ich 'captcha_1' daraus, verschwindet zwar dieser Fehler, fühlt sich aber trotzdem falsch an und ändert nichts an den "illegal strings"-Meldungen...
          Ich fürchte dass ich mich noch nicht auf dem richtigen Level befinde

          Kommentar


          • #6
            Eine Funktion sollte niemals in einem If erstellt werden. Und wie kommst du auf $lang['index']? Wo kommt "index" her?

            Kommentar


            • #7
              Zitat von Sysmatic Beitrag anzeigen
              Google spuckt mir nach langer Suche nicht das aus was ich brauche, hoffe nun dass Ihr mir helfen könnt. Danke!
              Wenn ich mir deine Arrays $num und $words so anschaue, würde ich darauf tippen, dass du array_combine() suchst.

              Allerdings ist die damit erzeugte Kombination sehr fragil. Warum benutzt du nicht einfach ein assoziatives Array? In deinem Fall eine Sammlung von Paaren aus Ganzzahl (als Key) und Zeichenkette (als Value)? So etwas wie:
              PHP-Code:
              $map = array (
                  
              => 'null',
                  
              => 'eins',
                  
              // ...
                  
              13 => 'dreizehn',
              ); 
              Da bleibt die Zuordnung (Zahl zu Text) festgetackert. Das geht auch mit je nach Sprache angepasster Variante.

              In beiden Fällen solltest du die Zahl 0 (Text: "null") erlauben. Das erspart dir lästige Off-by-one-Fehler. Und heutzutage sollte die Menschheit auch keine Angst mehr vor dieser Zahl haben.

              Aus dem geposteten Quellcode-Teilstück werde ich nicht so recht schlau. Daher hier eine Funktion, die die Berechnung und das Zusammenkleben der Zeichenketten übernimmt:
              PHP-Code:
              function generateCaptchaPair(
                      
              $map null /// indexed list of numeric strings (sorted from 0...max)
                  
              ) {
                      if (empty (
              $map)) { // fallback if no $map given
                          
              $map = array (
                              
              => 'nix',
                              
              => 'oans',
                              
              => 'zwoa',
                              
              => 'dreie',
                              
              => 'viere',
                              
              => 'fueneff',
                              
              // ...
                          
              );
                      }
                      
              $offsetA mt_rand(0count($map) - 1);
                      
              $offsetB mt_rand(0count($map) - 1);

                      if (
              mt_rand(01) || $offsetA $offsetB) {
                          
              // add operands
                          
              return array (
                              
              // captcha string to display
                              
              $map[$offsetA] . ' + ' $map[$offsetB],
                              
              // captcha calculation result (integer)
                              
              key(array_slice($map$offsetA1true)) + key(array_slice($map$offsetB1true)),
                          );            
                      }
                      
              // subtract operands
                      
              return array (
                          
              $map[$offsetA] . ' - ' $map[$offsetB],
                          
              key(array_slice($map$offsetA1true)) - key(array_slice($map$offsetB1true)),
                      );            
                  } 
              Du wirfst beim Aufruf der Funktion dein "Übersetzungs-Array" ein und hinten kommt ein Array heraus, welches als erstes die anzuzeigende Zeichenkette und als zweites das Ergebnis der daraus resultierenden Rechenoperation enthält, wie beispielsweise:
              Code:
              array(2) {
                  [0] => string(5) "oans + zwoa"
                  [1] => int(3)
              }
              PHP-Code:
              // ein Test-Beispiel:
              $map = array ('nada''1''2''3''4''5''6''7''brezel''9''10''11''12''jason');

              for (
              $c 5$c 0; --$c) {            
                  
              var_dump(generateCaptchaPair($map));

              Wenn man die Wurst schräg anschneidet, hält sie länger, weil die Scheiben größer sind.

              Kommentar

              Lädt...
              X