参数没有正确传递给array_search

时间:2016-11-12 18:45:08

标签: php arrays search command-line

嗨我有一个问题,即我使用终端运行命令,将值“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) 

这两个都有效。然而,我的实际问题包括不同长度的单词,而不仅仅是单个字符。这告诉我这个词后面的空格一定是个问题吗?我希望这有道理吗?

1 个答案:

答案 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";
}