-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 )

a : a の場合

u u : u の場合

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 

デモ

ご覧のとおり、キーが指定されていない配列要素には、次に使用可能な数値インデックス値が与えられます (最初のインデックス値はゼロから始まります)。

次の理由により、2 番目の例は機能しません。

  1. まだ存在しない変数の値をチェックしていて (そして PHP が通知します)、結果としてそのコードを入力することはありません。

  2. 上記で説明したように、キーを持たない配列値は数値的にキー付けされるため、0 は whichtrueに渡されると評価されます。empty()false

おそらくあなたが探しているのは、配列項目を操作する前に、配列項目に数値以外のキーがあることを確認することです。

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

ご覧のとおり、キーは01、およびfavoriteです。キーが指定されていない場合は、キーをPHP作成し、現在の最大の整数キーから始めて増加し続けます。整数キーがない場合は、 で始まります0

配列を理解することは、PHP の基本です。マニュアルをお読みください。

于 2016-07-24T00:43:42.300 に答える