忍受我,我正在学习。 我经常看到如下所示的片段:
<?p
$imageArray = get_field('image_field');
$imageAlt = $imageArray['alt'];
$imageURL = $imageArray['url'];
?>
教学法,清晰有序。但是在查询数组之前是否有必要获取整个数组?我可以不在一行中定义变量吗?像下面的东西(它不起作用,我试过的其他变种都没有):
$imageAlt = get_field('image_field', ['alt']);
$imageURL = get_field('image_field', ['url']);
答案 0 :(得分:7)
是的,你可以。
从PHP 5.4开始,可以直接对函数或方法调用的结果进行数组取消引用。之前只能使用临时变量。 - Source
$imageAlt = get_field('image_field')['alt'];
答案 1 :(得分:6)
您提出的问题可以通过提出2个问题来回答:
可行吗?
是的!您不必将数组存储在变量中,以后再重复使用。
例如,你可以这样做:
$imageAlt = get_field('image_field')['alt'];
注意:这将在PHP 5.4+中使用,名为:Array dereferencing。
但这不是唯一的考虑因素......
这样做是不是一个好主意?
没有。在许多情况下,这不是一个好主意。 get_field()
函数(取决于您的上下文)可能执行大量工作,每次调用它时,相同的工作都会多次执行。
假设您使用count()
函数。它将计算数组中的项目数。要做到这一点,它必须遍历所有项目才能获得价值。
如果每次需要验证数组中的项目数时都使用count()
函数,那么您每次都要执行计数任务。如果您的阵列中有10个项目,您可能不会注意到。但是如果您的数组中有数千个项目,这可能会导致计算代码时出现延迟问题(例如,它会很慢)。
这就是为什么你想要做的事情:$count = count($myArray);
并使用变量而不是调用函数。
这同样适用于您的问题。
答案 2 :(得分:2)
虽然PHP 5.4+允许你直接解除引用一个函数返回值,如下所示:
get_field('image_field')['alt']
...在这种特殊情况下,我不建议您这样做,因为您从结果数组中使用两个值。函数调用本身就有一定的开销,另外你在返回结果之前不知道函数在幕后的作用。如果你两次调用该函数,可能会招致大量不必要的工作,其中单个函数调用也可以完成。
这更不用说保留代码DRY;如果你需要改变函数调用的细节,你现在需要改变它两次......
答案 3 :(得分:0)
PHP允许你玩很多东西:
function foo(){
return array('foo' => 1, 'bar' => 2);
}
选项1
echo foo()['foo']; // 1
# Better do this if you plan to reuse the array value.
echo ($tmp = foo())['foo']; // 1
echo $tmp['bar']; // 2
不建议调用返回数组的函数,专门获取 1 键,并在下一行执行相同的操作。 因此最好将函数的结果存储在变量中,以便以后可以使用它。
选项2
list($foo, $bar) = array_values(foo());
#foo is the first element of the array, and sets in $foo.
#bar is the second element, and will be set in $bar.
#This behavior is in PHP 7, previously it was ordered from right to left.
echo $foo, $bar; // 12
选项3
extract(foo()); // Creates variable from the array keys.
echo $foo, $bar;
extract(get_field('image_field'));
echo $alt, $url;