-1

我有一个数组。

$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] => 8400 [u] => 1100 [0] => 1300 [1] => 1400 [2] => 1)

当一个:一个

你当你:你

0 当一个 : 0

1
2

问题出现在 php 分配的密钥 0 上。

4

2 回答 2

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 

演示

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

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

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

  2. 0 将评估为何true时传递给empty()which,因为正如我在上面解释的那样,没有键的数组值将被数字键控,第一个值的键为零,这将成为false你的 if 语句,这可能不是你想要的。

您可能正在寻找的是确保数组项在对其进行操作之前具有非数字键:

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

演示

于 2016-07-24T00:43:18.127 回答
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 的基础。请阅读手册

于 2016-07-24T00:43:42.300 回答