首页 > 解决方案 > 如何从数组中取出一条记录

问题描述

我有一个函数可以计算每个字母的点数。我要她计算每个单词的分数。看到这是我的代码:

function getValue() {
    $letter = $this->getName(); // String from FORM

    // Switch looks at a letter and assigns the value points for that letter
    switch(true){
        case($letter == 'a'||$letter == 'e'||$letter == 'i'||$letter == 'o'||$letter == 'u'||$letter == 'l'||$letter == 'n'||$letter == 's'||$letter == 't'||$letter == 'r'):
            return 1;
        case($letter == 'd'||$letter == 'g'):
            return 2;
        case($letter == 'b'||$letter == 'c'||$letter == 'm'||$letter == 'p'):
            return 3;
        case($letter == 'f'||$letter == 'h'||$letter == 'v'||$letter == 'w'||$letter == 'y'):
            return 4;
        case($letter == 'k'):
            return 5;
        case($letter == 'j'||$letter == 'x'):
            return 8;
        case($letter == 'q'||$letter == 'z'):
            return 10;
        default:
            return 0;
    }
}
function makeWordsPoint() {
    $total_word_points = 0;
    $words = $this->word_for_letters;
    foreach ($words as $word) {

        $total_word_points = $word->getValue();
    }
    echo $word . "=" . $total_word_points
}

我该怎么做?感谢帮助

编辑:

好的,现在看。有我的两个班 Word 和 Letter

<?php
    class Word
    {
        private $word;
        private $words_with_points = array();

        function __construct($user_letters)
        {
            $this->word = $user_letters;

            // creates array of object word for letters
            $this->word_for_letters = $this->makeWordForLetters();

            // creates array of letter objects for the word
            $this->words_with_points = $this->makeWordsWithPoints();

        }

        function makeWordForLetters()
        {
            $word_objects = array();
            $word = $this->getWord();
            $file = file_get_contents( __DIR__."/../src/dictionary.txt");
            $items = explode("\n", $file);

            $letters = str_split($word);

            foreach ($items as $item) {
                $list = $letters;
                // remove the original word (once)
                $thisItem = preg_replace("/$word/", '', $item, 1);
                for ($i = 0; $i < strlen($thisItem); $i++) {
                    $index = array_search($thisItem[$i], $list);

                    if ($index === false) {
                        continue 2; // letter not available
                    }

                    unset($list[$index]); // remove the letter from the list
                }

                array_push($word_objects, $item);
            }

            return $word_objects; // passed!

        }

        function makeWordsWithPoints()
        {
            $word = $this->makeWordForLetters();
            $letter_objects = array();

            foreach ($word as $character) {
                array_push($letter_objects, new Letter($character));
            }

            return $letter_objects;
        }

        function getWord()
        {
            return $this->word;
        }

        function getWordForLetters()
        {
            return $this->word_for_letters;
        }

        function getWordsWithPoints()
        {
            return $this->words_with_points;
        }

    }
 ?>
<?php
    class Letter
    {
        private $name;
        private $value;

        function __construct($letter)
        {
            $letter = strtolower($letter);
            $this->name = $letter;
            $this->value = $this->setValue();
        }

        function getName()
        {
            return $this->name;
        }

        function getValue()
        {
            return $this->value;
        }

        function setValue()
        {
            $letter = $this->getName();

            switch(true){
                case($letter == 'a'||$letter == 'e'||$letter == 'i'||$letter == 'o'||$letter == 'u'||$letter == 'l'||$letter == 'n'||$letter == 's'||$letter == 't'||$letter == 'r'):
                    return 1;
                case($letter == 'd'||$letter == 'g'):
                    return 2;
                case($letter == 'b'||$letter == 'c'||$letter == 'm'||$letter == 'p'):
                    return 3;
                case($letter == 'f'||$letter == 'h'||$letter == 'v'||$letter == 'w'||$letter == 'y'):
                    return 4;
                case($letter == 'k'):
                    return 5;
                case($letter == 'j'||$letter == 'x'):
                    return 8;
                case($letter == 'q'||$letter == 'z'):
                    return 10;
                default:
                    return 0;
            }
        }
    }
 ?>

现在,当我现在写这样的字母时: loso 函数makeWordForLetters()在我的数组中正确搜索这个字母的单词,我用makeWordsWithPoint这样的点显示这个单词:

l - 1
lo - 0
loo - 0
loos - 0
los - 0
oslo - 0
s - 1
solo - 0

但正如您所见,分数不正确,因为它显示的是单个字母而不是单词的结果。

我怎么解决这个问题?

标签: phploopsforeach

解决方案


将其作为字符串,然后使用 preg_split 函数,计算新的数组长度。例如:

$string="php教程#php入门:教程#字符串:多分隔符#字符串:拆分#数组";
$arr = preg_split("/(#|:)/",$string);
print_r($arr);

推荐阅读