你能从数组中获得价值而不先获得数组吗?

时间:2016-04-05 15:39:59

标签: php arrays

忍受我,我正在学习。 我经常看到如下所示的片段:

<?p
$imageArray = get_field('image_field');
$imageAlt = $imageArray['alt'];
$imageURL = $imageArray['url'];
?>

教学法,清晰有序。但是在查询数组之前是否有必要获取整个数组?我可以不在一行中定义变量吗?像下面的东西(它不起作用,我试过的其他变种都没有):

$imageAlt = get_field('image_field', ['alt']);
$imageURL = get_field('image_field', ['url']);

4 个答案:

答案 0 :(得分:7)

是的,你可以。

  

从PHP 5.4开始,可以直接对函数或方法调用的结果进行数组取消引用。之前只能使用临时变量。 - Source

$imageAlt = get_field('image_field')['alt'];

https://eval.in/548036

答案 1 :(得分:6)

您提出的问题可以通过提出2个问题来回答:

  1. 可行吗?
  2. 这样做是不是一个好主意?
  3. 可行吗?

    是的!您不必将数组存储在变量中,以后再重复使用。

    例如,你可以这样做:

    $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;

查找有关list构造函数和extract函数的更多信息。