【问题标题】:selecting array for array_push using Ternary Operator [duplicate]使用三元运算符为array_push选择数组[重复]
【发布时间】:2021-07-17 09:41:18
【问题描述】:

我有两个数组,我想根据特定条件附加到一个或另一个。问题是 array_push 函数应该在 foreach 循环内的 switch case 的 case 内调用,因此使用 if-else 意味着要多出 20 行代码。我以为我可以使用三元运算符来做到这一点,但由于某种原因它不起作用。

$arr1 = ['1', '2'];
$arr2 = ['a', 'b'];
$condition = False;
array_push($condition ? $arr1 : $arr2, 'new');

产生此错误: array_push(): Argument #1 ($array) cannot be passed by reference

我认为 $arr1 和 $arr2 是引用,因此您应该能够传递它们,但有些事情不是应该的。至少它在 C 中是这样的。

【问题讨论】:

  • 几分钟后,我想我可以这样做$condition ? array_push($arr1, 'new') : array_push($arr2, 'new'),但我仍然想知道为什么我的第一个解决方案不起作用。

标签: php


【解决方案1】:

查看array_push() 的函数签名:

array_push(array &$array, mixed ...$values): int

注意第一个参数中的&。这表明必须传递一个引用。

只有变量可以通过引用传递。三元表达式是一个表达式。

如果你想这样做,你需要先建立引用,然后传递它。而且没有捷径可走。

if( $condition) $ref = &$arr1; else $ref = &$arr2;
array_push($ref, 'new');
$ref = null; // clear reference

【讨论】:

  • 我确实尝试过认为它会像在 C 中传递指针一样工作,但我得到语法错误(意外的标记“&”)
  • 是的,事实证明这是错误的。我不经常使用引用(我更喜欢对象)所以哎呀。
猜你喜欢
  • 2021-08-07
  • 2019-07-30
  • 2016-02-13
  • 2016-08-30
  • 2018-11-09
  • 2012-02-02
  • 2021-03-31
  • 2014-05-31
  • 2019-07-14
相关资源
最近更新 更多