0

「foreach」ループとswitchステートメントを使用して反復処理するインデックスとして文字列と数値を含む配列があります:-

$test = array(1, 2, 3, 'test' => 'value');
foreach ($test as $k => $v)
{
    switch ($k)
    {
        case 'test': 
            echo $v . "\n"; 
            break;
    }
}

出力は です。

1
value

Switch は文字列 'test' と整数 1 を同じものとして処理しているようですが、これは正しくないようです。

4

5 に答える 5

1

なぜこれが起こっているのかは100%わかりませんが、switch緩い比較(===ではなく==)を使用しているため、0が「真実」であると見なされ、ケースが実行されていると思われます.

1 つの回避策は、渡された値が文字列であることをテストすることです。

$test = array(1, 2, 3, 'test' => 'value');
foreach ($test as $k => $v)
{
    switch (is_string($k))
    {
        case 'test':
            echo $v . "\n";
            break;
    }
}

それが働いて参照してください

ただし、それがあなたのソリューションよりも優れているかどうかはわかりませんが、私にとってはより理にかなっています。

于 2013-10-02T12:12:14.440 に答える
1

解決策は、インデックスを文字列に変換することです。

switch ($k . '')
{
    ...
}
于 2013-10-01T13:56:38.573 に答える