我有此代码:
return in_array( get_theme_mod( 'header_style' ), ['style-1','style-2','style-3','style-4', 'style-6'] );
应该准确返回header_style
(可能为style-1, style-2, etc.
)在该列表中。
简单来说,是:
in_array( 'style-1', ['style-1','style-2','style-3','style-4', 'style-6'] );
如何用isset重写它?
答案 0 :(得分:1)
isset
检查是否设置了键的值,因此您需要重建第二个数组,作为一个例子:
// `style-` become keys
['style-1' => true, 'style-2' => true, 'style-3' => true, 'style-4' => true, 'style-6' => true];
现在,您可以使用isset
:
$allowed_styles = ['style-1' => true, 'style-2' => true, 'style-3' => true, 'style-4' => true, 'style-6' => true];
// option is:
// $allowed_styles = array_fill_keys(['style-1', 'style-2'], true);
return isset($allowed_styles[get_theme_mod( 'header_style' )]);
答案 1 :(得分:0)
正如another question中所述,isset实际上比in_array快。 in_array为O(n),而isset为O(1)。
使用isset的一种方法是以以下形式重写数组:
$array = ['style-1' => true, 'style-2' => true, 'style-3' => true, 'style-4' => true, 'style-6' => true];
如果只搜索一次数组,那么这是最好的方法。但是,如果您不喜欢该方法的冗长性,并且打算多次检查某个元素的存在,则可以这样做:
$array = ['style-1', 'style-2', 'style-3','style-4', 'style-6'];
$array = array_flip($array);
这将反转键和值,因此$array['style-1']
将为0,$array['style-2']
将为1,依此类推。然后,您可以使用isset或array_key_exists:
return array_key_exists( get_theme_mod( 'header_style' ), $array );
我听说有传言说,从PHP7开始,array_key_exists的速度比isset快,但实际上我还没有看过任何基准测试。