我的PHP代码无法正常工作

时间:2013-07-20 13:07:14

标签: php tags switch-statement case

我正在尝试做一些会传输hexa do binary的程序。问题是将A,B,C,..,F更改为10,11,12,...,15因此我可以像使用数字一样使用它们。我做了这个功能:

function odstran_pismena($pole)
{
    $dlzka = count($pole);
    for ($i = 0; $i< $dlzka; $i++)
        switch ($pole[$i])
            {
                case 0: break;
                case 1: break;
                case 2: break;
                case 3: break;
                case 4: break;
                case 5: break;
                case 6: break;
                case 7: break;
                case 8: break;
                case 9: break;
                case ("A" || "a"): $pole[$i] = 10;
                                break;
                case ("B" || "b"): $pole[$i] = 11;
                                break;
                case ("C" || "c"): $pole[$i] = 12;
                                break;
                case ("D" || "d"): $pole[$i] = 13;
                                break;
                case ("E" || "e"): $pole[$i] = 14;
                                break;
                case ("F" || "f"): $pole[$i] = 15;
                                break;
                default: $pole[$i] = "ERROR";
                                break;
            }
    return $pole;
}

首先我从字符串制作数组,现在我想将字母改为数字。

我正在使用此字符串对其进行测试:$test = "AbCdEf2345"; 我期待的结果是10 11 12 13 14 15 2 3 4 5但我所有的都是10 10 10 10 10 10 2 3 4 5

我做了一些mystake吗?(我当然是,但在哪里?)

4 个答案:

答案 0 :(得分:1)

(“A”||“a”)计算为布尔值'true',因此所有a到f都会被案例捕获(“A”||“a”)并导致10。

不使用hexdec()并且对代码进行最小的更改:

function odstran_pismena($pole)
{
    $dlzka = count($pole);
    for ($i = 0; $i< $dlzka; $i++)
        switch ($pole[$i])
        {
            case 0: break;
            case 1: break;
            case 2: break;
            case 3: break;
            case 4: break;
            case 5: break;
            case 6: break;
            case 7: break;
            case 8: break;
            case 9: break;
            case "A":
            case "a": $pole[$i] = 10;
                            break;
            case "B":
            case "b": $pole[$i] = 11;
                            break;
            case "C":
            case "c": $pole[$i] = 12;
                            break;
            case "D": 
            case "d": $pole[$i] = 13;
                            break;
            case "E": 
            case  "e": $pole[$i] = 14;
                            break;
            case "F": 
            case "f": $pole[$i] = 15;
                            break;
            default: $pole[$i] = "ERROR";
                            break;
        }
     return $pole;
}

答案 1 :(得分:0)

指定case ("A" || "a"): $pole[$i] = 10;后,评估为true。因此,与true匹配的所有字符都返回true。对于'case'条件避免使用表达式。使用比较的静态值,例如

case "A":
case "a":
    $pole[$i] = 10;
    break;

答案 2 :(得分:0)

帮助您的一个简单方法是使用strtolower:

switch(strtolower($pole[$i])) {

   case "a" :...
    break;
   case "b": ...
    break;

}

或简单地说,作为你职能的第一行:

$pole = strtolower($pole);

这样您就不必费心上/下壳。

答案 3 :(得分:0)

您应该使用hexdec()并将整个for循环替换为:

for ($i = 0; $i< $dlzka; $i++)
{
  $pole[$i] = hexdec($pole[$i]);
}

请注意,您将收到0的无效值,因此您可能需要单独检查它是否可能发生,例如使用原始值is_numeric