php switch ($array_key) when there is no key for some array


php switch ($array_key) when there is no key for some array elements

我有一个数组。

$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 

演示

正如您所看到的,没有指定键的数组元素将被赋予下一个可用的数字索引值(第一个索引值从零开始)。

您的第二个示例不起作用,因为:

  1. 您正在检查一个还不存在的变量的值(PHP会通知您),因此您永远不会输入该代码。

  2. 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',
]

正如您所看到的,密钥是01favorite。当未指定键时,PHP会创建一个键并保持递增,从当前的最高整数键开始。如果没有整数键,则从0开始。

在PHP中,理解数组是基本的。请阅读手册。