非常奇怪 PHP 正在用 1 覆盖变量赋值

Very Weird PHP is overwriting variable assignment with 1

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

让我们以这段非常简单的代码为例:

$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->id 的 ID 值数组,因此 $p_idprint_r 的结果应该类似于 Array(295, 298, 301)

相反,结果是 1。不是 array(1)。就 1.

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

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

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

将代码更改为:

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

应该可以了。