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 に答える