我有这个数组(它最终不起作用,并给出非法偏移类型错误。
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', ...],
]
您能否向我解释为什么第一个不起作用,或者有关该错误的提示,以便我可以在线查看等?
第二是我的主要问题,有很多方法可以实现我想要的,但我想要最佳实践,这对我来说看起来是最干净的方法。
对于问题的第一部分,php 数组是关联数组,这意味着它们只能有一个值作为键。关联数组是键值对,其中一个键存在多个值,但反之则不然。因此您会收到错误消息
[
['jpg', ...] => 'images',
['avi', ...] => 'videos'
]
不是为了这个
[
'images' => ['jpg', ...],
'videos' => ['avi', ...],
]
处理这个问题的更好方法是
案例1:
[
'images' => ['jpg', ...],
'videos' => ['avi', ...],
]
或者 案例2
[
'jpg' => ['images'],
'bmp' => ['images'],
'avi' => ['videos'],
'mp4' => ['videos'],
]
现在如您所见,案例 1 很紧凑,并不多余,因此继续使用案例 1 作为 2 中更好的方法。
希望这有帮助。
您正在尝试设置一个以数组为键的关联数组!
手册页:http://php.net/manual/en/language.types.array.php
密钥可以是整数或字符串。该值可以是任何类型。
注意:
PHP 数组可以与 PHP 同时包含整数和字符串键 不区分索引数组和关联数组。
试试这个:
protected $files = [
'jpeg' => 'images',
'bmp'=> 'images',
'mp4' => 'videos',
'avi' => 'videos'
];
如果您交换键和值(您不能使用数组作为 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