1

在 PHP 中,我有以下构造

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

这给出了语法错误。是否仍然可以在一条方便的行中避免多个 if/else 类或 switch/select 语句来做这些事情?我在想python哪里可以正常工作:

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

4 回答 4

6

它只适用于PHP5.5.0alpha1 - 5.5.0beta2您现在应该使用变量,直到发布稳定版本。

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

另一个有趣的事情是PHP支持函数数组解引用,PHP 5.4这意味着只需将数组包装在一个函数中就可以使其工作

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

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

您可以创建一个辅助函数,以便您可以在一行中完成。

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

print array_get(array(-1 => '-', 0 => '?', 1 => '+'), 1);
于 2013-04-24T13:06:10.363 回答
0

不管是哪个 PHP 版本,如果你是在那之后,你的函数集中应该有一些东西:

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

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

这对非常基本的函数允许您最经常地告诉 PHP 解析器您需要什么和意味着什么:

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

在您的具体情况下,您只需要第二个功能,但第一个通常也很有用。

于 2013-04-24T13:23:11.497 回答
-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 回答