【问题标题】:Using true and false as array index in php?在php中使用true和false作为数组索引?
【发布时间】: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:我没有痛苦。我只是好奇而已。我在#stackoverflow 上搜索并没有发现类似的问题。所以我只是想就此发表意见,就像一次健康的谈话一样。显然不是得分的事情
  • 马克贝克的答案来源:php.net/manual/en/language.types.array.phpBools are cast to integers, too, i.e. the key true will actually be stored under 1 and the key false under 0.

标签: php arrays indexing logic


【解决方案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 文件中定义这两个状态消息(这里考虑一个终端客户端)不是更好吗?因为客户端不喜欢硬编码字符串,对吧?
猜你喜欢
  • 2011-01-23
  • 2021-12-25
  • 2013-07-20
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 2011-01-16
  • 2016-07-18
  • 2010-11-30
相关资源
最近更新 更多