在php中使用true和false作为数组索引?
Posted
技术标签:
【中文标题】在php中使用true和false作为数组索引?【英文标题】:Using true and false as array index in php? 【发布时间】:2014-05-13 14:34:14 【问题描述】:当我遇到一个特定情况时,我正在处理一个示例web-service
,以输出两个给定值(字符串)中的任何一个的结果。所以,我想,我可以使用true-false
作为这些字符串数组的索引吗?为了验证,我测试了相同的并且它正在工作。逻辑对我来说很清楚,true 和 false 作为数组的 1 和 0 索引:
$arr = array(true=>"string1",false=>"string2");
$res = $arr[$test_val];
但是,我可以使用以下方法实现相同的效果:
$res = $test_val? "String1":"String2";
所以,我想知道,我认为哪种方法更好,在这两种方法中,相同数量的内存被用完?或者不,数组使用更多,对吧?
【问题讨论】:
当使用布尔值作为数组键时,它们被转换为整数,即键 true 将实际转换为 1,而键 false 转换为 0 我认为您正在为一些不重要的事情而苦恼。但我会选择三进制,因为它更易于阅读。如果您的应用需要这种级别的优化,那我很惊讶 @Mark:是的,我知道。我清楚地指出了这一点。 @edmondcommerce:我没有痛苦。我只是好奇而已。我在#*** 上搜索并没有发现类似的问题。所以我只是想就此发表意见,就像一次健康的谈话一样。显然不是得分的事情 马克贝克的答案来源:php.net/manual/en/language.types.array.php:Bools are cast to integers, too, i.e. the key true will actually be stored under 1 and the key false under 0.
【参考方案1】:
良好的编码风格倾向于使用最清晰的结构,因此如果您打算进行比较,则三元运算符 (?:
) 在这里更合适,因为它们可以进行比较:
$res = $test_val ? 'String1' : 'String2';
从内存/速度的角度来看:三元组可能也更快,因为它不必创建内存结构,尽管取决于应用程序的大小,这不太可能产生明显的影响。
注意:如果您真的关心优化,请尽可能使用单引号而不是双引号,因为这些不会被解析为变量和特殊字符:P
希望这会有所帮助:) x
【讨论】:
假设我们需要将应用程序交付给一个客户,他将在其中自定义消息。那么,在这种情况下,使用数组(是的,仍然只有两个值)不是更好的方法吗? 嗯...这取决于。如果您正在谈论在代码的其他地方有一个配置数组,然后您引用它,那么是的,这将是一种更好的方法:) 所以我认为这将与“基于情况”的方法联系在一起.. :)【参考方案2】:三元运算符会更快 让我们开始程序运行
$arr = array(true=>"string1",false=>"string2");
$res = $arr[$test_val];
程序做什么:- 创建一个分配两个索引和值的数组,然后将数组分配给$arr
,然后分配给$res
现在是三元
$res = $test_val? "String1":"String2";
简单的$test_val
将与字符串匹配并分配给$res
所以会更快
【讨论】:
从可用性的角度来看,让用户在不同的 ini 文件中定义这两个状态消息(这里考虑一个终端客户端)不是更好吗?因为客户端不喜欢硬编码字符串,对吧?以上是关于在php中使用true和false作为数组索引?的主要内容,如果未能解决你的问题,请参考以下文章