我有一个数组。
$ arrayVar = array(8,10,'u'=> 24,'m'=> 45,54,45);
foreach($arrayVar as $curK=>$curV)
switch($curK)
{
case 'u':
echo $curK; //statement
break;
default:
//statements
}
为什么第一种情况下的语句是为所有$ curK执行的,除了标签与$ curK的值匹配时,还没有指定数组键?
我确实尝试通过检查$ curK的空值
来克服这个问题if(!empty($curK)) {
foreach($arrayVar as $curK=>$curV)
switch($curK)
{
case 'u':
echo $curK; //statement
break;
}
}
...
$arrayVar = array('a'=>8400,'u'=>1100,1300,1400,true);
echo '<pre>'; print_r($arrayVar);
foreach($arrayVar as $curK=>$curDU)
{
echo "\n" . $curK . "\t";
switch($curK)
{
case 'a':
echo 'When a : ' . $curK . "\n";
break;
case 'u':
echo 'When u : ' . $curK . "\n";
break;
default:
}
}
这是我得到的结果
阵 ( [a] =&gt; 8400 [u] =&gt; 1100 [0] =&gt; 1300 [1] =&gt; 1400 [2] =&gt; 1 )
a当a:a
u当你:你
0当a:0
时 1
2
问题出现在php分配的密钥0上。
答案 0 :(得分:2)
每个数组元素都有一个键。如果您遍历当前阵列并回显每个键,您将获得以下内容:
$arrayVar = array(8, 10, 'u'=>24, 'm'=>45, 54, 45);
foreach($arrayVar as $curK=>$curV)
{
echo $curK, ' ';
}
//outputs: 0 1 u m 2 3
正如您所看到的那样,没有指定键的数组元素将被赋予下一个可用的数字索引值(对于第一个值,它将从零开始)。
你的第二个例子没有成功,因为:
您正在检查尚未存在的变量的值(并且PHP会通知您),您将永远不会输入该代码。
< / LI> 0传递给true
时将评估为empty()
,因为正如我上面所解释的那样,没有键的数组值将以数字方式键入,第一个值将具有一个键在你的if语句中,这将成为false
,这可能不是你想要的。
您可能正在寻找的是确保数组项在执行之前具有非数字键:
foreach($arrayVar as $curK=>$curV) {
if(!is_int($curK)) {
switch($curK)
{
case 'u':
case 'm':
echo $curK; //statement
break;
default:
// do somethng
}
}
}
答案 1 :(得分:2)
每个数组元素都有一个键,即使您没有明确声明它。要查看它们,请使用array_keys
功能。考虑一下这个数组:
$arr = ['apple','banana', 'favorite' => 'plum'];
favorite
似乎是唯一的关键,但事实并非如此:
$keys = array_keys($arr);
print_r($keys);
结果:
[
0 => 0,
1 => 1,
2 => 'favorite',
]
如您所见,密钥为0
,1
和favorite
。如果未指定密钥,PHP
将创建一个密钥并继续递增,从最高的当前整数密钥开始。如果没有整数键,则以0
开头。
在PHP中理解数组是基础。请read the manual。