为了账号安全,请及时绑定邮箱和手机立即绑定

转换数组 php

转换数组 php

PHP
白猪掌柜的 2023-08-26 19:02:27
我想知道是否可以将数组从状态 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 次,但每个都有自己的数据。我希望我是可以理解的。
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

是的你可以。由于您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);


查看完整回答
反对 回复 2023-08-26
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信