1

PHPでは、次の構造があります

$a = array(-1 => '-', 0 => '?', 1 => '+')[1];

構文エラーが発生します。複数の if/else クラスや switch/select ステートメントを避けて、便利な 1 行でそのようなことを行うことはまだ可能ですか? 私はこれがうまくいくpythonで考えていました:

a = {-1:'-', 0:'?', 1:'+'}[1]
4

4 に答える 4

6

動作するのは5.5.0alpha1 - 5.5.0beta2PHPだけです。安定したバージョンがリリースされるまで、変数を使用する必要があります。

$array =  array(-1 => '-', 0 => '?', 1 => '+');
print $array[1];

もう1つの興味深いことは、関数配列の逆参照をPHPサポートすることです。これは、配列を関数でラップするだけで機能することを意味しますPHP 5.4

function __($_) {
    return $_;
}

print __(array(-1 => '-', 0 => '?', 1 => '+'))[1];
于 2013-04-24T13:02:53.360 に答える
0

PHP のバージョンに関係なく、それ以降の場合は、関数セットに何かを含める必要があります。

function deref($subject) {
    return $subject;
}

function deref_array($array, $key) {
    return $array[$key];
}

この非常に初歩的な関数のペアにより、PHP パーサーに最も頻繁に必要なものと意味を伝えることができます。

$a = deref_array(array(-1 => '-', 0 => '?', 1 => '+'), 1);

具体的なケースでは、2 番目の関数のみが必要ですが、最初の関数もしばしば役立ちます。

于 2013-04-24T13:23:11.497 に答える
-1

1行の方法は次のとおりです。

$a = array_pop(array_slice(array(-1 => '-', 0 => '?', 1 => '+'), 1, 1));

または一般的なケースでは:

$x = array_pop(array_slice(foo(), $offset, 1));

もちろん、これは恐ろしいことです。

于 2013-04-24T13:11:11.230 に答える