2012-08-09 98 views
1

我对PHP有点新,我不确定这是使用还是气馁或其他。我想知道PHP如何处理这种数组,以及我是否应该使用它。PHP关联式的数组作为键

该数组看起来像这样。

$arr = [0x00010000 => $valueOne, 0x00020000 => $valueTwo] // and so on 

value变量代表单个数字,表示周围的按键之间的某处。例如。 valueOne的范围从0x00010000x0001FFF。该数组使用相同的模式展开,因为需要更多的值。

谢谢!

回答

4

你在做什么没有问题,你只是使用数字索引数组,而不是使用十进制表示法来定义键,而是使用十六进制表示法。 PHP以相同的方式处理这两种情况(十进制和十六进制)。

十进制以下是等价的:

[ 4096 => $valueOne, 8192 => $value ] 
+0

对于不使用十六进制有什么好处吗?是否有任何额外的处理?我正在使用它,因为它使我更容易。 另外我猜主要问题不是关于十六进制符号,而是更多地设置一些关键的X,Y和Z,而不是0,1,2。 – SpaceFace 2012-08-09 17:42:35

+0

这两种方法都没有“优点”,而且极其微小(如果任何)额外处理。不要担心这种方法会带来额外的开销 - 使用十六进制和十进制是两种完全有效且可互换的方式来声明数组中的键。 – nickb 2012-08-09 17:50:40

2

阵列总是在PHP关联。除了方括号初始值设定项(这是仅限于PHP 5.4的语法,因此人们避免使用它)之外,没有什么特别奇怪的代码。

有一点需要记住的是,foreach()会按顺序返回项目。如果在某个时间后执行$ arr [0x00000010] = $ valueThree,它将不会出现在项目之前索引0x00001000。这种秩序的缺乏将使无法确定密钥是否落在两个密钥之间。您需要使用kso​​rt()来保持项目的顺序。

您可能更适合将范围的开始和结束索引作为值存储在对象中。确定密钥是否落入特定范围的逻辑变得容易得多:

foreach($ranges as $range) { 
    if($value >= $range->start && $value < $range->end) { 
     return $range->value; 
    } 
}