PHP:即时访问数组值
在PHP中,我经常需要使用一个数组来映射一个variables……但是我似乎无法在一个class轮中做到这一点。 比如:
// 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];
这是一个小问题,但它每隔一段时间就会一直在窃听……我不喜欢这个事实,我没有使用variables;)
我真的不打扰那个额外的variables。 如果你愿意,你也可以在使用它之后从内存中删除它:
$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语言的语法只允许在variablesexpression式的结尾处使用下标符号,而不是一般的expression式 ,这就是它在大多数其他语言中的工作原理。 我一直认为这是语言的一个缺陷,因为可以有一个语法来明确地解决任何expression式的下标。 但是,可能会出现这种情况,他们正在使用一个不灵活的parsing器生成器,或者他们不想破坏某种向后兼容性。
以下是有效expression式中更多的无效下标示例:
$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.
这被称为数组解引用。 它已被添加到PHP 5.4中。 http://www.php.net/releases/NEWS_5_4_0_alpha1.txt
更新[2012-11-25]:自PHP 5.5起,解除引用已被添加到contants /string以及数组
这可能不是直接相关的..但我来到这个职位find解决这个具体问题。
我以下面的forms得到了一个函数的结果。
Array ( [School] => Array ( [parent_id] => 9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a ) )
我想要的是parent_id值“9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a”。 我用这样的function,并得到它。
array_pop( array_pop( the_function_which_returned_the_above_array() ) )
所以,这是在一行:)希望这将有助于有人。
function doSomething() { return $somearray; } echo doSomething()->get(1)->getOtherPropertyIfThisIsAnObject();
实际上,有一个优雅的解决scheme:)以下将myfunc返回的数组的第三个元素分配给$ myvar:
$myvar = array_shift(array_splice(myfunc(),2));
或者像这样,如果你需要一个variables的数组值
$variable = array('a','b','c'); $variable = $variable[$key];
有几个线索,你可以拿出来,使用php array_ *函数。 但我向你保证,这样做是完全多余的比较你想达到什么。
例如,你可以使用类似下面的东西,但这不是一个优雅的解决scheme,我不知道这个performance,
array_pop ( array_filter( array_returning_func(), function($key){ return $key=="array_index_you_want"? TRUE:FALSE; },ARRAY_FILTER_USE_KEY ) );
如果你正在使用一个PHP框架,并且你坚持使用旧版本的PHP,大多数框架都会帮助库。
例如:Codeigniter数组助手