2013-07-20 17 views
0

我正在嘗試執行一些程序,它將傳輸hexa做二進制。問題在於將A,B,C,...,F更改爲10,11,12,...,15,所以我可以像使用數字一樣使用它們。我做了這個功能:我的PHP代碼無法正常工作

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

首先我從字符串中創建數組,現在我想將字母改爲數字。

I'm以該字符串測試它:$test = "AbCdEf2345"; 我期待結果10 11 12 13 14 15 2 3 4 5但所有的i都是10 10 10 10 10 10 2 3 4 5

上午我做一些mystake?(當然我,但在哪裏?)

回答

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

當您指定case ("A" || "a"): $pole[$i] = 10;它評估爲true。所以你所有的字符匹配true返回true。爲'情況'條件避免使用表達式。用你的比較,例如靜態值

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

你能解釋我爲什麼it's這種方式工作?我真的很感謝:)另一個問題是爲什麼如果把「案例0:打破;」在開始時它會改變什麼,就像它是真的? :) 謝謝 –

0

一個簡單的方法來幫助你,這將是使用用strtolower:

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

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

} 

或簡單地說,因爲你的函數的第一行:

$pole = strtolower($pole); 

這樣你就不必擔心上/下殼。

0

您應該使用hexdec()和替換你整個for循環使用:

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

請注意,您將收到一條0非有效的值,所以你可能要檢查該分開,如果它可以發生,使用例如原始值爲is_numeric