【问题标题】:PHP array_push() is pushing object incorrectly into another array before pushingPHP array_push() 在推送之前将对象错误地推送到另一个数组中
【发布时间】:2019-05-23 07:25:56
【问题描述】:

我正在循环一些数据并动态创建一个我想推入数组的对象。

$messageObj = new stdClass(); $recipientsObj = new stdClass();
$messageObj->message_recipients = Array();

$size = count($results);
for( $j = 0; $j < $size; $j++ ) {
    $recipientsObj->recipient_name = $results[$j]['recipient_name'];
    $recipientsObj->phone_number = $results[$j]['phone_number'];

    var_dump(json_encode($recipientsObj)); // DUMP 1

    array_push($messageObj->message_recipients, clone $recipientsObj);

    var_dump($messageObj->message_recipients); // DUMP 2
}

问题

// DUMP 1 输出预期的数据——例如

string(55) "{"recipient_name":"JOHN DOE","phone_number":"123456789"}"

但是当我将对象推入数组时,对象被作为数组推入,所以我得到:

[ [{...}], [{...}], [{...}] ]  // DUMP 2

而不是

[ {...}, {...}, {...} ]

这可能是什么原因造成的?我推错了吗?

【问题讨论】:

  • 嗨克林特,我没有看到这种行为:3v4l.org/YN073
  • 在循环内使用$recipientsObj = new stdClass(); 可能会更好(作为循环范围内的本地变量
  • @Nick 你是对的 - 我刚刚将错误追踪到代码的另一部分,我正在执行 array_chunk 导致问题中的问题。

标签: php arrays stdclass array-push


【解决方案1】:

将错误追踪到我在 message_recipients 上执行 array_chunk 并将块推送到数组 ($messageObj-&gt;message_recipients) 的代码部分,从而导致问题中的问题。

所以我只是通过将 $messageObj-&gt;message_recipients 等同于块而不是 array_push() 来解决它,因为它已经是一个数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-23
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2019-12-22
    相关资源
    最近更新 更多