我有一个数组。
$arrayVar=数组(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] =>8400[u] =>1100[0]=>1300[1] =>1400[2] =>1)
a当a:
u当u:u
0当出现:0 时
1
2
php分配的密钥0出现了问题。
每个数组元素都有一个键。如果你循环浏览你当前的数组并回声出每个键,你会得到以下信息:
$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会通知您),因此您永远不会输入该代码。
0在传递给
empty()
时将计算为true
,因为正如我在上面解释的那样,没有键的数组值将被数字键控,第一个值的键为零,它将在if语句中变为false
,这可能不是您想要的。
你可能想要的是在对数组项进行操作之前确保它有一个非数字键:
foreach($arrayVar as $curK=>$curV) {
if(!is_int($curK)) {
switch($curK)
{
case 'u':
case 'm':
echo $curK; //statement
break;
default:
// do somethng
}
}
}
演示
每个数组元素都有一个键,即使您没有显式声明它。要查看它们,请使用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中,理解数组是基本的。请阅读手册。