php开关($ array_key)当某些数组元素没有键时

时间:2016-07-24 00:31:14

标签: php arrays switch-statement array-key

我有一个数组。

$ 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上。

2 个答案:

答案 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 

Demo

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

你的第二个例子没有成功,因为:

  1. 您正在检查尚未存在的变量的值(并且PHP会通知您),您将永远不会输入该代码。

    < / LI>
  2. 0传递给true时将评估为empty(),因为正如我上面所解释的那样,没有键的数组值将以数字方式键入,第一个值将具有一个键在你的if语句中,这将成为false,这可能不是你想要的。

  3. 您可能正在寻找的是确保数组项在执行之前具有非数字键:

    foreach($arrayVar as $curK=>$curV) {
      if(!is_int($curK)) {
        switch($curK)
        {
            case 'u':
            case 'm':
                echo $curK;  //statement
                break;
            default:
                // do somethng
        }
      }
    }
    

    Demo

答案 1 :(得分:2)

每个数组元素都有一个键,即使您没有明确声明它。要查看它们,请使用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中理解数组是基础。请read the manual