我有这个数组(最终不起作用,并给出非法的偏移类型错误。
protected $files = [
['jpeg','bmp'] => 'images',
['mp4','avi'] => 'videos',
]
这种方法就是我想要的。
public function getType($extension){
// my question is related to this method right here.
}
这是测试区域
var_dump( (new FileDetector())->getType('jpeg') ); // this should return 'image'
所以这里的想法是搜索$ files数组。
然而,在写这样的东西时我得到的第一个错误是' Illegal offset type
'我无法创建一个如下所示的数组:
[
['jpg', ...] => 'images',
['avi', ...] => 'videos'
]
它的工作方式相反,如
[
'images' => ['jpg', ...],
'videos' => ['avi', ...],
]
如果你有时间,可以向我解释为什么第一个不起作用,或者提示有关该错误的提示,以便我可以在线查看...
第二个是我的主要问题,有很多方法可以实现我想要的但我想要最佳实践,这对我来说看起来就像最干净的方式。 谢谢你的时间。我希望我的要求是明确的。答案 0 :(得分:2)
对于问题的第一部分,php数组是关联数组,这意味着它们只能有一个值作为键。关联数组是键值对,其中一个键存在多个值,但反之则不然。因此,您收到此错误
[
['jpg', ...] => 'images',
['avi', ...] => 'videos'
]
而不是这个
[
'images' => ['jpg', ...],
'videos' => ['avi', ...],
]
更好的处理方法是
案例1:
[
'images' => ['jpg', ...],
'videos' => ['avi', ...],
]
或 案例2
[
'jpg' => ['images'],
'bmp' => ['images'],
'avi' => ['videos'],
'mp4' => ['videos'],
]
现在你可以看到,案例一是紧凑的,而不是多余的,所以继续将案例1作为2中更好的方法。
希望这会有所帮助。
答案 1 :(得分:1)
您正在尝试设置一个关联数组,并将数组作为键!
手册页:http://php.net/manual/en/language.types.array.php
密钥可以是整数或字符串。值可以是任何类型。
注:
PHP数组可以与PHP同时包含整数和字符串键 不区分索引数组和关联数组。
试试这个:
protected $files = [
'jpeg' => 'images',
'bmp'=> 'images',
'mp4' => 'videos',
'avi' => 'videos'
];
答案 2 :(得分:0)
如果交换键和值(不能将数组用于Php数组中的键),我们可以遍历列表,直到找到您所追求的扩展名。
<?php
$type_extensions = [
'images' => ['jpeg','bmp'],
'videos' => ['mp4','avi']
];
$get_type_from_extension = function($extension) use ($type_extensions) {
foreach($type_extensions as $type => $extensions) {
if(in_array($extension, $extensions))
return $type;
}
};
var_dump($get_type_from_extension('mp4'));
var_dump($get_type_from_extension('ogg'));
输出
string 'videos' (length=6)
null