0

私がプレイするゲームのウェブサイトで作業しています。このページで、ユーザーは機器を説明するテキストのブロックをアップロードできます。うまくいけば、それを解析してオブジェクトを作成し、MySQLにアップロードできます。ブロックの例を次に示します。

Item:         an ethereal bracelet
Key words:    geq grey_man man ethereal bracelet geq_Guxx
Type:         treasure
Level:        50
Extra flags:  rot-death no-transfer
Weight:       2
Value:        0
Affects:      spell-resistance by 5.
Affects:      dexterity by 1.
Affects:      strength by 1.
Affects:      intelligence by 1.
Affects:      wisdom by 1.
Affects:      hitroll by 5.
Affects:      constitution by 1.
Affects:      hp by 50.
Affects:      damroll by 10.

そして、これが私の機器クラス内の関数です:

public function create_eq_from_text($text) {
        $text = trim($_POST['item']);
        $text = explode("\n", $text);
        foreach($text as $line) {
            switch($line) {
                case strstr($line, 'Item:'):
                    $this->name = trim(str_replace('Item:', '', $line));
                    break;
            case strstr($line, 'Key words:'):
                $line = trim(str_replace('Key words:', '', $line));
                $this->key_words = $line;
                break;
            case strstr($line, 'Type:'):
                $line = trim(str_replace('Type:', '', $line));
                $this->type = $line;
                break;
            case strstr($line, 'Level:'):
                $line = trim(str_replace('Level:', '', $line));
                $this->level = intval($line);
                break;
            case strstr($line, 'Extra flags:'):
                $line = trim(str_replace('Extra flags:', '', $line));
                $this->extra_flags = $line;
                break;
            case strstr($line, 'Weight:'):
                $line = trim(str_replace('Weight:', '', $line));
                $this->weight = intval($line);
                break;
            case strstr($line, 'Value:'):
                $line = trim(str_replace('Value:', '', $line));
                $this->value = intval($line);
                break;
            case strstr($line, 'physical attacks'):
                $this->p_ac = get_number($line);
                break;
            case strstr($line, 'magic attacks'):
                $this->m_ac = get_number($line);
                break;
            case strstr($line, 'spell-resistance'):
                $this->saves = get_number($line);
                break;
            case strstr($line, 'dexterity by'):
                $this->dex = get_number($line);
                break;
            case strstr($line, 'strength by'):
                $this->str = get_number($line);
                break;
            case strstr($line, 'intelligence by'):
                $this->intel = get_number($line);
                break;
            case strstr($line, 'wisdom by'):
                $this->wis = get_number($line);
                break;
            case strstr($line, 'constitution by'):
                $this->con = get_number($line);
                break;
            case strstr($line, 'damroll by'):
                $this->dam = get_number($line);
                break;
            case strstr($line, 'hitroll by'):
                $this->hit = get_number($line);
                break;
            case strstr($line, 'hp by'):
                $this->hp = get_number($line);
                break;
            case strstr($line, 'mana by'):
                $this->mana = get_number($line);
                break;
            case strstr($line, 'Damage is'):
                $line = trim(str_replace('Damage is', '', $line));
                $line = str_replace('.', '', $line);
                $this->weapon_damage = $line;
                break;
            }
        }
}

フォームのコードは次のとおりです。

    if(isset($_POST['submit']) && !empty($_POST['item'])) {
    $item = new Equipment;
    $item->create_eq_from_text($item);
    print_r($item);
    }

何らかの理由で、スイッチがキャッチしているのはstrstr('Item:')だけです。最初は、スイッチの中断がforeachからの中断であると思いましたが、それを除外しました。誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

0

$ line内の部分文字列を探しているため、このような場合にswitchステートメントを使用することはできません。Switchステートメントは、ブール値ではなく、指定された変数との一致を探します。

于 2012-07-25T04:07:01.420 に答える