Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中使用true和false作为数组索引?_Php_Arrays_Indexing_Logic - Fatal编程技术网

在php中使用true和false作为数组索引?

在php中使用true和false作为数组索引?,php,arrays,indexing,logic,Php,Arrays,Indexing,Logic,我正在处理一个示例web服务,这时我遇到了一个特定的案例,从两个给定值(字符串)中的任意一个输出结果。所以,我想,我可以使用true-false作为这些字符串数组的索引吗?为了验证这一点,我测试了同样的方法,并且效果良好。我很清楚,true和false用作数组的1和0索引: $arr = array(true=>"string1",false=>"string2"); $res = $arr[$test_val]; 但是,我可以通过以下方式实现同样的效果: $res = $test

我正在处理一个示例
web服务
,这时我遇到了一个特定的案例,从两个给定值(字符串)中的任意一个输出结果。所以,我想,我可以使用
true-false
作为这些字符串数组的索引吗?为了验证这一点,我测试了同样的方法,并且效果良好。我很清楚,true和false用作数组的1和0索引:

$arr = array(true=>"string1",false=>"string2");
$res = $arr[$test_val];
但是,我可以通过以下方式实现同样的效果:

$res = $test_val? "String1":"String2";

所以,我想知道,哪种方法更好,正如我所假设的,在这两种方法中,有相同数量的内存被使用?或者不,数组使用更多,对吗?

好的编码风格倾向于使用最清晰的结构,因此如果您打算进行比较,三元运算符(
?:
)在这里更合适,因为它们进行比较:

$res = $test_val ? 'String1' : 'String2';
从内存/速度的角度来看:三元可能也更快,因为它不必创建内存结构,尽管这取决于应用程序的大小,但这两种方式都不太可能产生明显的效果

注意:如果你真的关心优化,尽可能使用单引号而不是双引号,因为它们不会被解析为变量和特殊字符:p


希望这有帮助:)x

好的编码风格倾向于使用最清晰的结构,因此如果您打算进行比较,三元运算符(
?:
)在这里更合适,因为它们进行比较:

$res = $test_val ? 'String1' : 'String2';
从内存/速度的角度来看:三元可能也更快,因为它不必创建内存结构,尽管这取决于应用程序的大小,但这两种方式都不太可能产生明显的效果

注意:如果你真的关心优化,尽可能使用单引号而不是双引号,因为它们不会被解析为变量和特殊字符:p


希望这有帮助:)x

三值运算符会更快 让我们开始程序运行

$arr = array(true=>"string1",false=>"string2"); 
$res = $arr[$test_val];
程序操作:-创建一个数组,分配两个索引和值,然后数组分配给
$arr
,然后分配给
$res

现在是三元

$res = $test_val? "String1":"String2";
简单的
$test\u val
将与字符串匹配并分配给
$res

所以简单地说会更快

三元运算符会更快 让我们开始程序运行

$arr = array(true=>"string1",false=>"string2"); 
$res = $arr[$test_val];
程序操作:-创建一个数组,分配两个索引和值,然后数组分配给
$arr
,然后分配给
$res

现在是三元

$res = $test_val? "String1":"String2";
简单的
$test\u val
将与字符串匹配并分配给
$res


因此,如果将布尔值用作数组键,则速度会更快

,它们被转换为整数,也就是说,键true将被转换为1,键false将被转换为0。我认为您正在为一些不重要的事情而苦恼。但我会选择三元,因为它更容易阅读。如果你的应用程序需要这种级别的优化,那么我就是amazed@Mark:是的,我知道。我清楚地指出了这个问题。@edmondcommerce:我没有感到痛苦。我只是好奇。我在stackoverflow上搜索并没有发现类似的问题。所以我只是想听听大家对这件事的看法,就像一次健康的谈话。这不是评分问题,马克·贝克答案的明显来源:
布尔值也被转换为整数,也就是说,键true实际上存储在1下,键false存储在0下。
当使用布尔值作为数组键时,它们被转换为整数,也就是说,键true实际上将被转换为1,键false将被转换为0。我认为您正在为一些不重要的事情而苦恼。但我会选择三元,因为它更容易阅读。如果你的应用程序需要这种级别的优化,那么我就是amazed@Mark:是的,我知道。我清楚地指出了这个问题。@edmondcommerce:我没有感到痛苦。我只是好奇。我在stackoverflow上搜索并没有发现类似的问题。所以我只是想听听大家对这件事的看法,就像一次健康的谈话。这不是评分问题,马克·贝克答案的明显来源:
布尔值也被转换为整数,也就是说,键true将实际存储在1下,键false将存储在0下。
假设我们需要将应用程序交付给客户端,他将在客户端自定义消息。那么,在这种情况下,使用数组(是的,仍然只有两个值)不是更好的方法吗。。。视情况而定。如果您正在谈论在代码的其他地方使用配置数组,然后引用它,那么是的,这将是一种更好的方法:)因此我假设这将是一种与“基于情况”的方法相结合的方法:)假设我们需要将应用程序交付给客户机,客户机将定制其端的消息。那么,在这种情况下,使用数组(是的,仍然只有两个值)不是更好的方法吗。。。视情况而定。如果您正在谈论在代码的其他地方使用配置数组,然后引用它,那么是的,这将是一种更好的方法:)因此我假设这将是一种与“基于情况”的方法相结合的方法:)从可用性的角度来看,让用户在不同的ini文件中定义这两个状态消息(这里考虑一个终端客户机)不是更好吗?因为客户端不喜欢硬编码字符串,对吗?从可用性的角度来看,让用户在不同的ini文件中定义这两个状态消息(这里考虑一个终端客户端)不是更好吗?因为客户端不喜欢硬编码字符串,对吗?