题
在php,我常常需要地图的一个变量使用的一系列...但我不能似乎可以这样做在一个衬垫。c.f.例如:
// the following results in an error:
echo array('a','b','c')[$key];
// this works, using an unnecessary variable:
$variable = array('a','b','c');
echo $variable[$key];
这是一个次要问题,但它一直缠着在每一次当...我不喜欢这样的事实,即我使用一个变量,为什么;)
解决方案
我不理会这一额外的可变的,真的。如果你想要的,虽然,你也可以将其从记忆之后你用它:
$variable = array('a','b','c');
echo $variable[$key];
unset($variable);
或者,你也可以写一个小的功能:
function indexonce(&$ar, $index) {
return $ar[$index];
}
和这个叫:
$something = indexonce(array('a', 'b', 'c'), 2);
阵列应自动销毁了。
其他提示
技术答案是, 语法 PHP语言只允许下标记法在结束 变量的表情 而不 表情 在一般情况下,它是如何工作的,在大多数其他语言。我总是看它作为一个缺乏的语言,因为它能够有法可以解决下标针对的任何表达明确。它可能的情况下,然而,他们正在使用一个灵活的解析器生成或他们只是不想打破某种倒退的兼容性。
这里有几个例子无效的标在有效表达方式:
$x = array(1,2,3);
print ($x)[1]; //illegal, on a parenthetical expression, not a variable exp.
function ret($foo) { return $foo; }
echo ret($x)[1]; // illegal, on a call expression, not a variable exp.
这就是所谓列取消引用.它已经加入php5.4.http://www.php.net/releases/NEWS_5_4_0_alpha1.txt
更新[2012-11-25]: as of PHP5.5中,取消引用已被添加到contants/串以及阵列
这可能不是直接相关的..但我来到这个职位找到解决这个具体问题。
我得到了一致函以下形式。
Array
(
[School] => Array
(
[parent_id] => 9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a
)
)
什么我想要的是parent_id值"9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a".我用这样的功能,并得到了它。
array_pop( array_pop( the_function_which_returned_the_above_array() ) )
因此,这样做是在一个线:) 希望这将是有帮助的个人。
function doSomething()
{
return $somearray;
}
echo doSomething()->get(1)->getOtherPropertyIfThisIsAnObject();
实际上,有一个优雅的解决方案:)以下将分配第3元件阵列返回的myfunc到$myvar::
$myvar = array_shift(array_splice(myfunc(),2));
或者像这样的东西,如果你需要的阵列数值中的一个变量
$variable = array('a','b','c');
$variable = $variable[$key];
有几个 尝尝我的必杀技射门吧 你能想出,使用php array_* 功能。但我向你保证,这样做这是冗余总比你想要什么来实现。
例如可以使用类似下面的,但它不是一个优雅的解决方案,而且我不知道有关性能;
array_pop ( array_filter( array_returning_func(), function($key){ return $key=="array_index_you_want"? TRUE:FALSE; },ARRAY_FILTER_USE_KEY ) );
如果您使用的是一个php框架和你被卡住了旧版本的php,最框架,已帮助库。
例如:笨列的助手
虽然事实,取消引用已经加入PHP>=5.4你可以做到的,在一线使用三操作员:
echo $var=($var=array(0,1,2,3))?$var[3]:false;
这样你就不让阵的唯一变量。你不需要额外的功能要做到的...如果此行为用于一个功能将自动被摧毁的结束而你也可以破坏它作为自己说 unset
后面的码,如果它不使用一个功能。