在PHP中,我有以下构造
$a = array(-1 => '-', 0 => '?', 1 => '+')[1];
,这给出了语法错误。是否仍然可以在一个方便的行中执行此类操作,避免多个if / else clases或switch / select语句?我在python上思考这项工作很好:
a = {-1:'-', 0:'?', 1:'+'}[1]
答案 0 :(得分:6)
它适用于PHP
但只有5.5.0alpha1 - 5.5.0beta2你现在应该使用变量,直到发布稳定版本。
$array = array(-1 => '-', 0 => '?', 1 => '+');
print $array[1];
另一个有趣的事情是PHP
PHP 5.4
支持Function Array Dereferencing,这意味着只需将数组包装在一个函数中就能使其正常工作
function __($_) {
return $_;
}
print __(array(-1 => '-', 0 => '?', 1 => '+'))[1];
答案 1 :(得分:1)
您可以创建辅助函数,以便在一行中完成。
function array_get($array, $key)
{
return $array[$key]
}
print array_get(array(-1 => '-', 0 => '?', 1 => '+'), 1);
答案 2 :(得分:0)
单行方式是:
$a = array_pop(array_slice(array(-1 => '-', 0 => '?', 1 => '+'), 1, 1));
或者在一般情况下:
$x = array_pop(array_slice(foo(), $offset, 1));
这当然很可怕。
答案 3 :(得分:0)
无论哪个PHP版本,如果你之后,你应该在你的功能集中有一些东西:
function deref($subject) {
return $subject;
}
function deref_array($array, $key) {
return $array[$key];
}
这对非常基本的函数允许您经常告诉PHP解析器您需要什么并且意味着:
$a = deref_array(array(-1 => '-', 0 => '?', 1 => '+'), 1);
在具体案例中,您只需要第二个函数,但第一个函数通常也很有用。