数组可以作为数组中的键吗

问题描述 投票:0回答:3

我有这个数组(它最终不起作用,并给出非法偏移类型错误。

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 arrays key
3个回答
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 很紧凑,并不多余,因此继续使用案例 1 作为 2 中更好的方法。

希望这有帮助。


1
投票

您正在尝试设置一个以数组为键的关联数组!

手册页:http://php.net/manual/en/language.types.array.php

密钥可以是整数或字符串。该值可以是任何类型。

注意:

PHP 数组可以与 PHP 同时包含整数和字符串键 不区分索引数组和关联数组。

试试这个:

protected $files = [
    'jpeg' => 'images',
    'bmp'=> 'images',
    'mp4' =>  'videos',
    'avi' => 'videos'
];

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
© www.soinside.com 2019 - 2024. All rights reserved.