首页 / 知识

PHP:快速访问数组值

2023-04-12 08:01:00

PHP:快速访问数组值

PHP: Access Array Value on the Fly

在php中,我经常需要使用数组来映射变量...但是我似乎无法在一个内衬中做到这一点。 c.f. 例:

1
2
3
4
5
6
// 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];

这是一个小问题,但有时会不时出现错误……我不喜欢这样的事实,我什么都不用使用变量;)


技术上的答案是,PHP语言的语法仅允许在变量表达式的末尾使用下标符号,而不是一般在表达式的末尾,这就是它在大多数其他语言中的工作方式。我一直认为它是语言的不足之处,因为有可能有一种语法可以明确地针对任何表达式解析下标。但是,可能是因为他们使用的是不灵活的解析器生成器,或者他们只是不想破坏某种向后兼容性。

以下是有效表达式中无效下标的另外两个示例:

1
2
3
4
5
$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起,取消引用已添加到contant / strings和arrays中


我真的不会去理会这个额外的变量。但是,如果需要,也可以在使用后将其从内存中删除:

1
2
3
$variable = array('a','b','c');
echo $variable[$key];
unset($variable);

或者,您可以编写一个小函数:

1
2
3
function indexonce(&$ar, $index) {
  return $ar[$index];
}

并通过以下方式调用:

1
$something = indexonce(array('a', 'b', 'c'), 2);

现在应该自动销毁该阵列。


这可能没有直接关系。.但是我来到这篇文章中,找到了针对此特定问题的解决方案。

我从以下形式的函数中得到了结果。

1
2
3
4
5
6
7
Array
(
    [School] => Array
            (
                [parent_id] => 9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a
            )
)

我想要的是parent_id值" 9ce8e78a-f4cc-ff64-8de0-4d9c1819a56a"。
我使用了这样的功能并得到了它。

1
array_pop( array_pop( the_function_which_returned_the_above_array() ) )

所以,它是一行完成的:)
希望对别人有帮助。


1
2
3
4
5
6
function doSomething()
{
    return $somearray;
}

echo doSomething()->get(1)->getOtherPropertyIfThisIsAnObject();

实际上,有一个优雅的解决方案:)下面将把myfunc返回的数组的第3个元素分配给$ myvar:

1
$myvar = array_shift(array_splice(myfunc(),2));


尽管在PHP> = 5.4中已经添加了取消引用的事实,但您可以使用三元运算符在一行中完成它:

1
echo $var=($var=array(0,1,2,3))?$var[3]:false;

这样,您就不会仅将数组保留为变量。而且您不需要额外的功能...如果在函数中使用此行,它将在末尾自动销毁,但您也可以自己销毁它,如后面的代码中使用unset所述未在函数中使用。


使用php array_ *函数,您可以提出几个oneliners。但我向您保证,比较您要实现的目标完全是多余的。

例如,您可以使用类似以下内容的方法,但这不是一个很好的解决方案,我不确定这样做的性能。

1
   array_pop ( array_filter( array_returning_func(), function($key){    return $key=="array_index_you_want"? TRUE:FALSE;    },ARRAY_FILTER_USE_KEY ) );

如果您使用的是php框架,而您却坚持使用旧版本的php,则大多数框架都有帮助库。

示例:Codeigniter数组助手


或类似的东西,如果您需要变量中的数组值

1
2
$variable = array('a','b','c');
$variable = $variable[$key];

数组变量映射快速

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢