嗨我有一个问题,即我使用终端运行命令,将值“a”传递给名为“category”的文件。
然后我运行我的php文件,然后我希望将“category”的内容设置为名为$datatype
的变量。这是成功的,因为当我回显变量时,我得到“a”来打印。但是,我想在数组中查找此值并返回相应的值“1”。它不起作用,除非我通过调用$datatype
直接设置$dataype = "2";
任何想法我做错了什么?
<?
//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);
或者建议使用的是什么:
array_search($datatype[0], $array)
这两个都有效。然而,我的实际问题包括不同长度的单词,而不仅仅是单个字符。这告诉我这个词后面的空格一定是个问题吗?我希望这有道理吗?
答案 0 :(得分: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";
}