【问题标题】:Very Weird PHP is overwriting variable assignment with 1非常奇怪的 PHP 用 1 覆盖变量赋值
【发布时间】:2018-09-01 15:15:21
【问题描述】:

有人知道这里发生了什么吗?

让我们来看这段非常简单的代码:

$p_id = array();
foreach($opp->participants as $party) {
    echo "ID value from data:" . var_dump($party->id) . "<br>";

    echo "Base array:" .  var_dump($p_id) . "<br>";
    $p_uuid = array();
    $p_assignment_id = array();
    $p_id = array_push($p_id, "$party->id");
    echo "Dump array result:" .var_dump($p_id) . "<br>";
}

这是我从中得到的输出(是的,这也是输出的格式):

int(295) ID value from data:<br>
array(0) { } Base array:<br>
int(1) Dump array result:<br>
int(298) ID value from data:<br>
array(0) { } Base array:<br>
int(1) Dump array result:<br>
int(301) ID value from data:<br>
array(0) { } Base array:<br>
int(1) Dump array result:<br>

这显然是一个菜鸟问题,但老实说我不知道​​为什么输出看起来像这样。

如果我使用print_r,这是我得到的结果:

295 ID value from data:1<br>
Array ( ) Base array: 1<br>
1 Dump array result: 1<br>
298 ID value from data:1<br>
Array ( ) Base array: 1<br>
1 Dump array result: 1<br>
301 ID value from data:1<br>
Array ( ) Base array: 1<br>
1 Dump array result: 1<br>

我希望看到的是来自$party-&gt;id 的 ID 值数组,因此$p_idprint_r 应该会产生类似于Array(295, 298, 301) 的结果。

结果是1。不是array(1)。只需1

为了更清楚,这里提取的数据甚至没有 1 作为 id。所以它甚至不应该存在。

我已经包含了print_rvar_dump 结果,因此您可以看到原始调试输出。

【问题讨论】:

  • 请指定预期输出
  • 你的目标是什么输出?如果您不想在值周围进行装饰,请删除 var_dump() 和 print_r() 位,这样您就可以获得变量的值。如果您想要其他东西,请向我们展示您想要的输出?
  • party->id != 1 ?
  • array_push 返回 true (1),因为它成功了。您无需将$p_id 设置为array_push
  • 将行改为array_push($p_id, "$party-&gt;id");

标签: php arrays variable-assignment


【解决方案1】:

您不需要将array_push() 的结果分配给$p_id。根据 PHP 文档,array_push() 函数的返回值是数组中元素的新数量,而不是数组本身。 See here

将代码改为:

array_push($p_id, "$party->id"); 

应该可以的。

【讨论】:

    猜你喜欢
    • 2015-04-01
    • 2011-04-08
    • 2012-12-15
    • 2016-06-01
    • 2012-12-16
    • 1970-01-01
    • 2014-09-03
    • 2012-09-04
    相关资源
    最近更新 更多