Php 如何从数组中获取单个记录

Php 如何从数组中获取单个记录,php,loops,foreach,Php,Loops,Foreach,我有一个计算每个字母点数的函数。我想让她数一数每个单词的分数。看,这是我的代码: 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

我有一个计算每个字母点数的函数。我想让她数一数每个单词的分数。看,这是我的代码:

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;
    }
}
我怎么能做到?谢谢你的帮助

编辑:

好的,现在看。这是我的两门课——单词和字母

<?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;
        }

    }
 ?>
但正如你所看到的,分数是不正确的,因为它只显示一个字母的结果,而不是一个单词的结果


我怎样才能解决这个问题

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

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

请尝试此代码。我认为它更干净

<?php

// set the score of each char into array
const SCORES = [
    // 1
    'a'=> 1,
    'e' => 1,
    'i' => 1,
    'o' => 1,
    'u' => 1,
    'l' => 1,
    'n' => 1,
    's' => 1,
    't' => 1,
    'r' => 1,
    // 2
    'd'=> 2,
    'g'=> 2,
    // 3
    'b'=> 3,
    'c'=> 3,
    'm'=> 3,
    'p'=> 3,
    // 4
    'f'=> 4,
    'h'=> 4,
    'v'=> 4,
    'w'=> 4,
    'y'=> 4,
    // 5
    'k'=> 5,
    // 8
    'j'=> 8,
    'x'=> 8,
    // 10
    'q'=> 10,
    'z'=> 10,
];

$word = 'abcdef'; // get the string from the request here
# print_r($word);

$chars = str_split($word); // split string into array of chars
# print_r($chars);  

$scores = array_map(function($char) { // create a scores array that convert char into value
    return SCORES[strtolower($char)] ?? 0; // get the score of each char and set to the array, if not exist set to 0
}, $chars);
# print_r($scores);  

$totalScore = array_sum($scores); // get the sum of the scores

echo $word . "=" . $totalScore;

谢谢你的帮助!我认为这是一个好主意,我认为它更干净。当我解决我的问题时,我尝试了这个解决方案:-)看看我编辑的帖子:-)
l - 1
lo - 0
loo - 0
loos - 0
los - 0
oslo - 0
s - 1
solo - 0
$string="php教程#php入门:教程#字符串:多分隔符#字符串:拆分#数组";
$arr = preg_split("/(#|:)/",$string);
print_r($arr);
<?php

// set the score of each char into array
const SCORES = [
    // 1
    'a'=> 1,
    'e' => 1,
    'i' => 1,
    'o' => 1,
    'u' => 1,
    'l' => 1,
    'n' => 1,
    's' => 1,
    't' => 1,
    'r' => 1,
    // 2
    'd'=> 2,
    'g'=> 2,
    // 3
    'b'=> 3,
    'c'=> 3,
    'm'=> 3,
    'p'=> 3,
    // 4
    'f'=> 4,
    'h'=> 4,
    'v'=> 4,
    'w'=> 4,
    'y'=> 4,
    // 5
    'k'=> 5,
    // 8
    'j'=> 8,
    'x'=> 8,
    // 10
    'q'=> 10,
    'z'=> 10,
];

$word = 'abcdef'; // get the string from the request here
# print_r($word);

$chars = str_split($word); // split string into array of chars
# print_r($chars);  

$scores = array_map(function($char) { // create a scores array that convert char into value
    return SCORES[strtolower($char)] ?? 0; // get the score of each char and set to the array, if not exist set to 0
}, $chars);
# print_r($scores);  

$totalScore = array_sum($scores); // get the sum of the scores

echo $word . "=" . $totalScore;