【问题标题】:Code Snippet String Functions Not Working?代码片段字符串函数不起作用?
【发布时间】:2021-06-06 03:28:28
【问题描述】:

每个字母都有一个数字。你写一个句子,你得到字母的总和。

出于同样的原因,$ 短语以小写形式出现。 $sum 始终为零,我不明白为什么会发生这种情况。你知道出了什么问题吗?

我在 WordPress 中使用代码 sn-ps

add_shortcode( 'infotable', function () {

    $phrase = strtoupper($_GET['phrase']);
    
    $length = strlen($phrase);
    $sum = 0;
    $bottom = 0;
    
    for($i = 0; $i < $length; $i++){
        switch($phrase{$i}) {
            case 'Α': case 'Ά': $sum += 1; break;
            case 'Β': $sum += 2; break;
            case 'Γ': $sum += 3; break;
            case 'Δ': $sum += 4; break;
            case 'Ε': case 'Έ': $sum += 5; break;
            case 'Ζ': $sum += 7; break;
            case 'Η': case 'Ή': $sum += 8; break;
            case 'Θ': $sum += 9; break;
            case 'Ι': case 'Ί': case 'Ϊ': $sum += 10; break;
            case 'Κ': $sum += 20; break;
            case 'Λ': $sum += 30; break;
            case 'Μ': $sum += 40; break;
            case 'Ν': $sum += 50; break;
            case 'Ξ': $sum += 60; break;
            case 'Ο': case 'Ό': $sum += 70; break;
            case 'Π': $sum += 80; break;
            case 'Ρ': $sum += 100; break;
            case 'Σ': $sum += 200; break;
            case 'Τ': $sum += 300; break;
            case 'Υ': case 'Ύ': case 'Ϋ': $sum += 400; break;
            case 'Φ': $sum += 500; break;
            case 'Χ': $sum += 600; break;
            case 'Ψ': $sum += 700; break;
            case 'Ω': case 'Ώ': $sum += 800; break;
            default:  break;
        }
    }
    
    $out = '<section>
        <h4>ΠΡΟΤΑΣΗ</h4>
        <h4>' . $phrase . '
        <h4>ΑΞΙΑ</h4>
        <h4>' . $sum . '</h4>
        <h4>ΠΥΘΜΕΝΙΚΟΣ</h4>
        <h4>' . $bottom . '</h4>
    </section>';

    return $out;
} );

【问题讨论】:

  • 如果您将 $phrase{$i} 更改为 $phrase[$i]
  • 我试过了,但它不起作用。我读到在 php 中你应该使用 {} 来访问字符串的字符

标签: php string code-snippets


【解决方案1】:

问题在于西里尔字符的字节偏移量比 ascii 字符大。

采取以下措施:

$p = 'ΠΡΟΤΑΣΗ';
$phrase = strtoupper($p);

$length = strlen($phrase);
echo($length);

$p = 'ΠΡΟΤΑΣΗ';
$phrase = strtoupper($p);

$length = strlen($phrase);
echo($length);

for($i = 0; $i < $length; $i++){
    echo($phrase{$i});
    echo($phrase[$i]);
}

这将输出:

14

�
�

�
�

�
�

�
�

�
�

�
�

�
�

�
�

�
�

�
�

�
�

�
�

�
�

�
�

您可以使用str_split(),这将允许您指定字节offest,而不是像这样:

$p = 'ΠΡΟΤΑΣΗ';
$phrase = strtoupper($p);

$phraseArray = str_split( $phrase, 2 );
$length = count($phraseArray);

echo($length);

for($i = 0; $i < $length; $i++){
    echo("<p>" . $phraseArray{$i});
    echo("<br>" . $phraseArray[$i]);
}

产生这个输出:

7

Π
Π

Ρ
Ρ

Ο
Ο

Τ
Τ

Α
Α

Σ
Σ

Η
Η

【讨论】:

  • 好吧,这句话显示出来了,但是 $sum 和 $bottom 呢?你有什么主意吗?准确地说,这些是希腊字符
  • 对不起,我在字符集上的错误。我不太清楚$bottom 的用途,所以我无法对此发表评论。至于$sum,您可以在我的代码示例中将您的 switch 语句放入 for 循环中,您应该得到正确的总和。您之前的代码不起作用,因为没有任何 case 语句与给定字符的单个字节匹配。
猜你喜欢
  • 2017-09-28
  • 2010-10-30
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多