Buchstabengruppen aus Alphabet

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

Werbung

Jetzt auf elektrisches Fahren umstellen, Umwelt schonen und 1.500km kostenlosen Strom von Tesla bekommen. https://ts.la/carsten15473.

AndreasB.

Neues Mitglied
20 Mai 2019
4
0
1
48
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
 

AndreasB.

Neues Mitglied
20 Mai 2019
4
0
1
48
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?
 

Sempervivum

Senior HTML'ler
18 Oktober 2016
1.437
285
83
66
Mein Vorschlag:
PHP:
$teststr = "CHARLYB";
for ($i = 0; $i < strlen($teststr); $i++) {
    $thechar = $teststr[$i];
    $group = intdiv(ord($thechar) - ord("A"), 3) + 1;
    var_dump($thechar);
    var_dump($group);
}
Sollen auch Kleinbuchstaben berücksichtigt werden und wenn ja wie? a-c, A-C: Gruppe 1?
 
Zuletzt bearbeitet:
Reactions: scbawik

AndreasB.

Neues Mitglied
20 Mai 2019
4
0
1
48
Vielen Dank.
Es sollte keine Rolle spielen, ob es Klein- oder Großbuchstaben sind.

Gruß
Andreas
 

Sempervivum

Senior HTML'ler
18 Oktober 2016
1.437
285
83
66
Dann kannst Du ja selbst versuchen, den Code entsprechend zu erweitern.
 

Tronjer

Moderator
Team
Moderator
8 Oktober 2010
5.121
443
83
Berlin
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:

scbawik

Senior HTML'ler
14 Juli 2011
2.542
448
83
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.
 
Reactions: Tronjer