• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Buchstabengruppen aus Alphabet

AndreasB.

Neues Mitglied
Hallo,

ich möchte einen String (Buchstaben) den passenden Buchstabengruppen aus dem Alphabet zuordnen.

Es gibt folgende Gruppen:
A-C = 1
D-F = 2
G-J = 3
K-M = 4
usw.

Wenn nun der String z.B. den Buchstaben "L" enthält, dann sollte eine Variable mit dem Wert "4" gefüllt werden.
Analog entsprechend A=1, J=3, F=2 usw.

Habe ich das so verständlich erklärt?
Wie kann ich das machen?

Gruß
Andreas
 
Werbung:
Ich frage jetzt jede Gruppe einzeln mit stripos ab:

if(stristr("abc", $string)) $auswahl="1";
elseif(stristr("def", $string)) $auswahl="2";
elseif....

Ist das so OK, oder gibt es einen bessere Lösung?
 
Werbung:

Das interessiert mich jetzt auch.

Ich bin kein PHPler und vielleicht denke ich zu kompliziert. Aber der erste Schritt ist doch, aus dem Alphabet ein Array von Objekten zu erstellen, die jeweils einen String aus 3 Zeichen und einen zugewiesenen Wert enthalten. Im zweiten Schritt filtert man anhand eines übergebenen Buchstabens das Array und lässt sich den korrespondierenden Wert des Objekts ausgeben.

In JS könnte das so aussehen:
Javascript:
const data = () => {
    const alphabet = [...Array(26)].map((_, i) => String.fromCharCode('A'.charCodeAt(0) + i));
    let arr = [], str = '', counter = 0;
    for (const [index, char] of alphabet.entries()) {
      str += char;
      if (index % 3  && (str.length > 2 || index > 22) ) {
        counter++;
        let obj = {chars: str, value: counter};
        arr.push(obj);
        str = '';
      }
    }
   return arr;
  }

// data = [{chars: 'ABC', value: 1}, {chars: 'DEF', value: 2}, ...];

  const value = (data, char) => {
    const filteredValue = data
      .filter(obj => {
       return obj.chars.includes(char);
      })
      .map(obj => {
        return obj.value;
      });
    return filteredValue.toString();
  }

  const test = value(data(), 'Z');
  // test = 9;
 
Zuletzt bearbeitet:
Das interessiert mich jetzt auch.

Ich bin kein PHPler und vielleicht denke ich zu kompliziert. Aber der erste Schritt ist doch, aus dem Alphabet ein Array von Objekten zu erstellen, die jeweils einen String aus 3 Zeichen und einen zugewiesenen Wert enthalten. Im zweiten Schritt filtert man anhand eines übergebenen Buchstabens das Array und lässt sich den korrespondierenden Wert des Objekts ausgeben.

In JS könnte das so aussehen:
Javascript:
const data = () => {
    const alphabet = [...Array(26)].map((_, i) => String.fromCharCode('A'.charCodeAt(0) + i));
    let arr = [], str = '', counter = 0;
    for (const [index, char] of alphabet.entries()) {
      str += char;
      if (index % 3  && (str.length > 2 || index > 22) ) {
        counter++;
        let obj = {chars: str, value: counter};
        arr.push(obj);
        str = '';
      }
    }
   return arr;
  }

// data = [{chars: 'ABC', value: 1}, {chars: 'DEF', value: 2}, ...];

  const value = (data, char) => {
    const filteredValue = data
      .filter(obj => {
       return obj.chars.includes(char);
      })
      .map(obj => {
        return obj.value;
      });
    return filteredValue.toString();
  }

  const test = value(data(), 'Z');
  // test = 9;

In PHP lässt sich ein String wie ein Array verwenden:

PHP:
$str = 'ABC';
echo $str[0]; // A
echo $str[1]; // B

Das ist bei @Sempervivum Antwort aber nicht relevant.
Statt mit Strings rumzuhantieren, wandelt er den Buchstaben in den ASCII-Wert um (65 == A, 66 == B, 67 == C,...).
Und dann ist es eigentlich nur noch eine einfache Rechnung, um diese Zahlen zu normalisieren und die "Gruppe" herauszufinden. Natürlich kommt das an Grenzen außerhalb von A-Z.

Aber für die Problemstellung eine schöne Lösung.
 
Werbung:
Zurück
Oben