【问题标题】:adding object to sub-array将对象添加到子数组
【发布时间】:2021-01-11 09:49:25
【问题描述】:

我需要按日期对数组进行分组但不工作。 无法将对象推入子数组。以下是我尝试过的代码。

$getData = array
(
    0 => array
    (
        'date' => '2017-08-22',
        'msg' => '1231',
    ),
    1 => array
    (
        'date' => '2017-08-21',
        'msg' => '1172',
    ),
    2 => array
    (
        'date' => '2017-08-20',
        'msg' => '1125'
    ),
    3 => array
    (
        'date' => '2017-08-21',
        'msg' => '251'
    ),
    4 => array
    (
        'date' => '2017-08-20',
        'msg' => '21773',
    ),
    5 => array
    (
        'date' => '2017-08-22',
        'msg' => '3750'
    )
);
$smsArr = [];
foreach ($getData as $xyz => $groupData) {
    $isFound = FALSE;
    $abc['date'] = $groupData['date'];
    $abc['data'] = [(object)["msg" => $groupData['msg']]];
    foreach ($smsArr as $key => $value) {
        if ($value['date'] == $groupData['date']) {
            array_push($value['data'], (object)["msg" => $groupData['msg']]); // nothing happens to final array
            $isFound = TRUE;
        }
    }
    if ($isFound == FALSE) {
        array_push($smsArr, $abc);
    }


}
print_r($smsArr);

尝试按日期对 json 进行分组。但是当尝试将元素推送到子数组时没有任何反应。

我应该得到最终结果

Array
(
    [0] => Array
    (
        [date] => 2017 - 08 - 21
        [data] => Array
        (
            [0] => stdClass Object
            (
                [msg] => 1172
            )
            [1] => stdClass Object
            (
                [msg] => 251
            )
        )
    )

    [1] => Array
    (
        [date] => 2017 - 08 - 20
        [data] => Array
        (
            [0] => stdClass Object
            (
                [msg] => 1125
            )
            [1] => stdClass Object
            (
                [msg] => 21773
            )
        )
    )
    
    [2] => Array
    (
        [date] => 2017 - 08 - 21
        [data] => Array
        (
            [0] => stdClass Object
            (
                [msg] => 3750
            )
            [1] => stdClass Object
            (
                [msg] => 1231
            )
        )
    )
)

当我尝试推送时 array_push($value['data'],(object)["msg"=>$groupData['msg']]);

它不会反映在最终数组上。

【问题讨论】:

  • 这是因为 foreach 在数组的 副本 中工作。您要么需要使用适当的键写入 $getData,要么使用引用。

标签: php arrays foreach


【解决方案1】:

当你想改变foreach 中的数组时,你应该通过引用传递它的值。所以这一行:

foreach ($smsArr as $key => $value)

改成

foreach ($smsArr as $key => &$value)

现在,当您更改 $value 时,$smsArr 将会更改。 本文档将帮助您了解有关该概念的更多信息。 https://www.php.net/manual/en/language.references.pass.php

【讨论】:

    猜你喜欢
    • 2018-11-22
    • 2022-01-13
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2018-07-17
    相关资源
    最近更新 更多