我的程序中有两个静态哈希表:
public static $labels = [
'id' => 'ID',
'name' => 'Name',
'email' => 'E-mail',
'password' => 'Password',
];
public static $columnTypes = [
'id' => 'number',
'name' => 'text',
'email' => 'text',
'password' => 'text',
];
第一个用于数据库列的标签,第二个用于每种类型(筛选所必需的(。
我的问题是我经常需要通过标签获取列的类型,这会导致速度问题(哈希表在这个方向上很慢,对吧?
我的方法如下:
- 键入一个哈希表
label => type
这很糟糕,因为我必须重复自己并且不支持其他语言
在 - 运行时的静态内容中创建
label => type
哈希表(这在 php 中可能吗?
对于这个问题,是否有更好的方法或最佳实践,第二种方法在 php 中是否可行?(也许有一个小例子;)
在类构造函数中调用array_flip
。为避免重复,请检查翻转数组是否已设置。
class YourClass {
public static $labels = [
'id' => 'ID',
'name' => 'Name',
'email' => 'E-mail',
'password' => 'Password',
];
public static $labels_flipped = null;
public function __construct() {
if (!$labels_flipped) {
$labels_flipped = array_flip($labels);
}
...
}
}
如果您需要获取具有值的键,则可以使用array_search()
或array_keys()
。
如果您需要在大型数组中多次执行此类查找,则建议翻转键和值(使用array_flip()
(,然后使用isset()
或使用[]
访问值。
为了得到真正的改进,上面段落中的大和大应该以千为单位。否则,请专注于确实需要优化的优化:数据库、磁盘访问、远程 API 等。