php - 将对象添加到子数组
问题描述
我需要按日期对数组进行分组但不工作。无法将对象推入子数组。以下是我尝试过的代码。
$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
)
)
)
)
当我尝试 push array_push($value['data'],(object)["msg"=>$groupData['msg']]);
它不会反映在最终数组上。
解决方案
当你想改变数组时,foreach
你应该通过引用传递它的值。所以这一行:
foreach ($smsArr as $key => $value)
将其更改为
foreach ($smsArr as $key => &$value)
现在当你改变$value
,$smsArr
就会改变。本文档将帮助您了解有关该概念的更多信息。
https://www.php.net/manual/en/language.references.pass.php
推荐阅读
- html - 有没有办法突出显示单击的垫选项卡?当每个 mat-tab 是动态生成的
- elasticsearch - 如何在索引之前删除单词之间的空格
- mysql - 为每个客户 X 写一个查询,另一个客户 Y 与 X 租了至少一部电影
- servicenow - 选择字段选项限制
- javascript - 在 JavaScript 中将 Unicode 转换为 ASCII
- junit - 如何制作模拟 JdbcTemplate.queryForObject() 方法
- swift - 不允许将已删除或无效的对象添加到领域
- ios - 使用 swift 与网站进行通用链接
- javascript - 用数组方法解决编程问题?
- blazor - 在 blazor 中引用 css 文件