0

我试图通过搜索它的值从数组中获取密钥。在下面的代码中,我不明白的是为什么文件扩展名是array_search()时找不到密钥,而文件扩展名是. 我注意到了一个类似的问题,即无法“找到”使用and 。$url"xls""php""xls"in_array()array_keys()

$url='http://mysite.com/hello.xls';
$url='http://mysite.com/hello.php';

$extension_arr=pathinfo($url);
$extension=strtolower($extension_arr['extension']);

$arr=array(
    'excel_file'=>'xls', 
    'excel_file'=>'xlsx',
    'php_file' =>'php'  
  );

$array_search_key=array_search($extension, $arr);
if($array_search_key !== false){
  echo $array_search_key;
}
else echo 'crap';
4

2 回答 2

5

您的搜索有效,但您正在搜索的数组有缺陷。元素 1 (xlsx) 覆盖元素 0,因为键相同。

$arr=array(
  'excel_file'=>'xls', 
  'excel_file'=>'xlsx',  // This overwrites the line above.
  'php_file' =>'php'  
);

翻转元素,然后您可以检查键是否存在:

$arr=array(
  'xls'=>'excel_file', 
  'xlsx'=>'excel_file',  
  'php'=>'php_file'  
);

if (isset($arr[$extension])) {
   // do stuff
   echo $arr[$extension];
}
于 2013-07-07T00:57:34.793 回答
0

首先尝试调试 $extension 如果它显示想要的值(xls),尝试交换键和 val,并尝试通过新键查找:

$aux = array();

foreach( $arr as $key => $val )
{
    $aux[ $val ] = $key;
}

所以你尝试找到当前值:

if ( isset( @$aux[ $extension ] ) ) echo "I found the current extension";
else "extension not found!";
于 2013-07-07T00:57:10.900 回答