PHP:哈希表优化
PHP: Hashtable optimization
我的程序中有两个静态哈希表:
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? (也许有一个小例子;)
在class构造函数中调用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()
or array_keys()
。
如果您需要在 large 数组中执行这种查找 a big 次,那么建议翻转键和值(使用 array_flip()
) then use isset()
or access the value using []
.
要得到真正的提升,上一段中的large和big要以千计。否则,专注于真正需要优化的优化:数据库、磁盘访问、远程 API 等。
我的程序中有两个静态哈希表:
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? (也许有一个小例子;)
在class构造函数中调用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()
or array_keys()
。
如果您需要在 large 数组中执行这种查找 a big 次,那么建议翻转键和值(使用 array_flip()
) then use isset()
or access the value using []
.
要得到真正的提升,上一段中的large和big要以千计。否则,专注于真正需要优化的优化:数据库、磁盘访问、远程 API 等。