在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作为数组索引?的主要内容,如果未能解决你的问题,请参考以下文章

php 判断数组里是不是有某个值

来自 jQuery Ajax 的 Bool 参数在 PHP 中作为文字字符串“false”/“true”接收

PHP - 多维数组

PHP 多维数组

(基础篇)数组的详解与使用

前端学习(39)~js学习(十六):数组