转换数组 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 = john2 次。


状态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和Name = peter出现 1 次 和ID = 10出现Name = john1 次,但每个都有自己的数据。


我希望我是可以理解的。


白猪掌柜的
浏览 118回答 1
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);
打开App,查看更多内容
随时随地看视频慕课网APP