php - 转换数组php
问题描述
我想知道我是否可以将数组从状态 1 转换为状态 2,如下例所示。
状态 1(示例):
array(5) {
[0]=> array(10) {
["id"]=> "6"
["name"]=> "peter"
["date"]=> "2020-09-25"
["sleep"]=> "20"
["pain"]=> "30"...
[1]=> array(10) {
["id"]=> "6"
["name"]=> "peter"
["date"]=> "2020-09-26"
["sleep"]=> "80"
["pain"]=> "90"...
[2]=> array(10) {
["id"]=> "10"
["name"]=> "john"
["date"]=> "2022-09-25"
["sleep"]=> "25"
["pain"]=> "15"...
[3]=> array(10) {
["id"]=> "10"
["name"]=> "john"
["date"]=> "2022-09-25"
["sleep"]=> "55"
["pain"]=> "65"...
[4]=> array(10) {
["id"]=> "6"
["name"]=> "peter"
["date"]=> "2020-09-27"
["sleep"]=> "40"
["pain"]=> "60"...
ID = 6
Name = peter
出现 3 次和ID = 10
出现Name = john
2 次。
状态 2:
array(2){
[0]=>array() {
['id']=> "6"
['name']=>"peter"
["dates" => [2020-09-25, 2020-09-26, 2020-09-27]]
["sleeps" => [20, 80, 40]]
["pains" => [30, 90, 60]]
[1]=>array() {
['id']=> "10"
['name']=>"john"
["dates" => [2022-09-25, 2022-09-25]]
["sleeps" => [25, 55]]
["pains" => [15, 65]]
}
这个想法是有一个只有一次相同ID和相同名称的数组,然后是具有相同字段值的数组,例如
(id => 1, name => kevin, [dates => [date1, date2, date3]], [sleep => s1, s2, s3]]
来自同一用户。
ID = 6
andName = peter
出现 1 次和ID = 10
andName = john
出现 1 次,但每个都有自己的数据。
我希望我是可以理解的。
解决方案
是的你可以。由于您id
似乎是独一无二的,因此迭代它并使用您的id
索引作为主索引创建新数组,您可以使用array_key_exists()来执行此操作。毕竟它应该是这样的:
array(2){
[6]=>array() {
['id']=> "6"
['name']=>"peter"
["dates" => [2020-09-25, 2020-09-26, 2020-09-27]]
["sleeps" => [20, 80, 40]]
["pains" => [30, 90, 60]]
[10]=>array() {
['id']=> "10"
['name']=>"john"
["dates" => [2022-09-25, 2022-09-25]]
["sleeps" => [25, 55]]
["pains" => [15, 65]]
}
那是 5 分钟的工艺,我很确定你会自己做。
<?php
$data = [
[
'id' => '6',
'name' => 'peter',
'date' => '2020-09-25',
'sleep' => '20',
'pain' => '30'
],
[
'id' => '6',
'name' => 'peter',
'date' => '2020-09-26',
'sleep' => '80',
'pain' => '90',
],
[
'id' => '10',
'name' => 'john',
'date' => '2022-09-25',
'sleep' => '25',
'pain' => '15',
],
[
'id' => '10',
'name' => 'john',
'date' => '2022-09-25',
'sleep' => '55',
'pain' => '65',
],
[
'id' => '6',
'name' => 'peter',
'date' => '2020-09-27',
'sleep' => '40',
'pain' => '60'
]
];
$newArr = [];
foreach ($data as $oldItem) {
$id = $oldItem['id'];
if (!array_key_exists($id, $newArr)) {
$newArr[$id] = [
'id' => $id,
'name' => $oldItem['name'],
'dates' => [$oldItem['date']],
'sleeps' => [$oldItem['sleep']],
'pains' => [$oldItem['pain']],
];
} else {
$newArr[$id]['dates'][] = $oldItem['date'];
$newArr[$id]['sleeps'][] = $oldItem['sleep'];
$newArr[$id]['pains'][] = $oldItem['pain'];
};
}
echo "<pre>JSON:\n";
echo json_encode($newArr, JSON_PRETTY_PRINT);
echo "\n\nprint_r():\n";
print_r($newArr);
推荐阅读
- node.js - 使用 req.body 从 body 读取属性
- google-sheets - 无法在 Google 表格中使用 Importxml 获取网站数据
- javascript - 函数使用对象来启动和销毁资源。如何将其重写为提供资源的 HOF?
- javascript - 按分类列出自定义帖子类型中的所有帖子不起作用
- python - Python:如何创建每次包含 X 字节的数据块
- xml - 批量替换并将 1 添加到 xml 文件中特定文本之间的数字
- java - 如何在休眠中执行不带参数的匿名plsql块?
- asp.net-core - Blazor WebAssembly 托管部署的 URL 重写异常
- django - 使用 django-filter 在 django rest 框架中过滤数据
- sql-server - 嵌套事务如何使用 SQL Server 中的触发器和不同的隔离级别?