2016-11-12 47 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"; 
} 
相关问题