我的部分申请需要验证用户输入。其中一些输入必须包含在可用选项列表中。例如,让我们采取团队名称:
$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()或在实践中这不重要吗?
答案 0 :(得分:0)
简短的回答是肯定的。如果列表大小为4则不重要,但对于可扩展的问题,它现在值得实施。
我想注意这是一种非常广泛且普遍(并且很好!)的方式来实现查找,没有理由回避它。哈希(包括数组)正是O(1)查找的正确数据结构。这还有一个额外的好处,你可以存储一些额外的数据并检索它(而不是在数组中放1)。
作为旁注,规范化输入是一个好主意 - 将其设为小写,以便团队喜欢" VikINgs"被接受(因为它们通常被认为是有效的)。你的数组也应该是小写的。也许也剥离空间等。