是否值得将数组值实现为利用array_key_exists() - PHP的键

时间:2018-01-21 18:34:13

标签: php arrays performance associative-array

我的部分申请需要验证用户输入。其中一些输入必须包含在可用选项列表中。例如,让我们采取团队名称:

$array_one = ["Vikings","Eagles","Jaguars","Patriots"];
$array_two = [
    "Vikings"=>1,
    "Eagles"=>1,
    "Jaguars"=>1,
    "Patriots"=>1
]

//Validate using array 1
if(in_array($user_input,$array_one)) {
   echo "Valid Input";
}

//Validate using array2
if(array_key_exists($user_input,$array_two)) {
   echo "Valid Input";
}

使用场景A阵列"看"更干净,更少hacky。然而,in_array必须进行O(n)数组搜索。我相信array_key_exists()或isset($ array [$ key])会导致O(1)查找。第二种方式感觉很难,因为我实际上使用键作为值。是构建我的数据集\数组的首选方法,如第二个示例,以避免使用in_array()或在实践中这不重要吗?

1 个答案:

答案 0 :(得分:0)

简短的回答是肯定的。如果列表大小为4则不重要,但对于可扩展的问题,它现在值得实施。

我想注意这是一种非常广泛且普遍(并且很好!)的方式来实现查找,没有理由回避它。哈希(包括数组)正是O(1)查找的正确数据结构。这还有一个额外的好处,你可以存储一些额外的数据并检索它(而不是在数组中放1)。

作为旁注,规范化输入是一个好主意 - 将其设为小写,以便团队喜欢" VikINgs"被接受(因为它们通常被认为是有效的)。你的数组也应该是小写的。也许也剥离空间等。