2016-11-12 32 views
0

嗨我有一個問題,我正在運行一個命令,使用將值「a」傳遞給名爲「category」的文件的終端。不能正確傳遞給array_search的參數

然後我運行我的php文件,然後希望將「category」的內容設置爲一個名爲$datatype的變量。這是成功的,因爲當我回顯變量時,我會打印出「a」。但是,我想然後在數組中查找此值並返回相應的值「1」。它不工作,除非我直接調用$dataype = "2";直接設置$datatype任何想法我做錯了什麼?

<? 
//PUT VALUE "a" INTO A FILE CALLED category 
echo shell_exec("cat ".$filename." | cut -f2 | head -1 > category"); 

$datatype = file_get_contents("category"); 
echo file_get_contents("category"); // PRINTS "a" 
echo $datatype; //PRINTS "a" 

$array = array(
      "1"=>"a", 
      "2"=>"b", 
      "3"=>"c", 
      "4"=>"d", 
     ); 

$key = array_search($datatype, $array); 
echo $key; // DOESN'T PRINT ANYTHING!!!! I EXPECT "1" TO BE PRINTED 



//IF I CHANGE TO BELOW IT WORKS...."1" IS PRINTED 
$datatype = "a"; 

?> 

使用什麼Xorifelse建議:

file_get_contents("category", NULL, NULL, 0, 1); 

或者有什麼建議yardpenalty:

array_search($datatype[0], $array) 

這些都工作。然而,我的實際問題涉及不同長度的單詞,而不僅僅是單個字符。這告訴我這個詞後面的空格肯定是個問題嗎?我希望這是有道理的?

+1

嘗試'回聲「‘$的數據類型’」;'和尋找隱藏的字符,比如'新line'等因'「a」!=「a \ n」' – Xorifelse

+1

你試過file_get_contents(「category」,NULL,NULL,0,1);所以它只返回第一個字符作爲字符串? – yardpenalty

+1

或者通過'array_search($ datatype [0],$ array)匹配字符串'$ datatype'中的第一個字符'' – Xorifelse

回答

1

如果您需要允許參數的長度不同,則可以使用trim() function。只要確保你有一個處理所有可能的字符串長度的,像這樣的開關情況:

function handleDataType($datatype){ 

$temp = trim($datatype); 
$key = ""; 
switch ($temp) { 
     case strlen($temp) == 1: 
     case strlen($temp) == 2: 
     case strlen($temp) == 4: 
      $key = array_search($temp, $array); 
      break; 
     default: 
      throw new Exception('Parameter is out of bounds!'); 
    } 
    $array = array(
      "1"=>"a", 
      "2"=>"to", 
      "3"=>"four", 
      "4"=>"d", 
     ); 

$key = array_search($datatype, $array); 

    return $key; 
} 


try { 

    $datatype = file_get_contents("category"); 
    echo handleDataType("six") . "\n"; 
} catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 
相關問題