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

如何构建对象/数组?

如何构建对象/数组?

PHP
jeck猫 2023-09-15 21:10:06
我对 PHP 相当陌生,所以我不知道如何使用这些数据集。我进行 MySQL 选择并返回一个像这样的对象:{  "membername": "NAME",  "bookingdate": "2020-02-03",  "categoryid": 1,  "dailyworkhourssum": "7.70"},{  "membername": "NAME",  "bookingdate": "2020-02-03",  "categoryid": 3,  "dailyworkhourssum": "1.2"},{  "membername": "NAME",  "bookingdate": "2020-02-05",  "categoryid": 3,  "dailyworkhourssum": "7.70"},我想迭代一遍,最后它应该看起来像这样:{      "membername": "NAME",      "bookingdate": "2020-02-03",      "categoryid1": true,      "categorid3": true,      "dailyworkhourssum1": "7.70",      "dailyworkhourssum3": "1.2"    },    {      "membername": "NAME",      "bookingdate": "2020-02-05",      "categoryid": 3,      "dailyworkhourssum": "7.70"    },这样做的作用是将两个字段合并在一起(如果它们具有相同的字段bookingdate),以便我可以将其显示在表格中而不会重复出现日期。我的问题:我不知道这种类型的数据叫什么。我不知道如何创建这样的东西。我可以向这种类型的数据添加字段,$data->newField = example所以我认为这是一个对象。
查看完整描述

2 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

在 JS 中,它被称为对象,但在 PHP 中,您将使用关联数组。在你的例子中,我认为你有一个关联数组的数组。它看起来像这样:


    $books = [

     [

       "membername" => "NAME",

       "bookingdate" => "2020-02-03",

       "categoryid" => 1,

       "dailyworkhourssum" => "7.70"

     ],

     [

       "membername" => "NAME",

       "bookingdate" => "2020-02-03",

       "categoryid" => 3,

       "dailyworkhourssum" => "1.2"

     ],

     [

       "membername" => "NAME",

       "bookingdate" => "2020-02-05",

       "categoryid" => 3,

       "dailyworkhourssum" => "7.70"

     ]

   ];

如果您想合并具有相同“bookingdate”的数组,那么我建议您循环遍历该数组,并将其元素添加到另一个以 bookingdates 作为键的关联数组,并检查是否已经存在这样的键,然后合并数组, 像这样:


$merged = [];

foreach ($books as $book) {

    $date = $book['bookingdate'];

    if (isset($merged[$date])) {

        $merged[$date] = $merged[$date] + $book;

    } else {

        $merged[$date] = $book;

    }

}

我认为这不是一个有效的代码(没有时间,抱歉),但我希望您能明白这个想法。


如果您想要一个“列表”而不是关联数组,那么您可以这样做:


 $mergedList = array_values($merged);

这样你就可以摆脱字符串键了。


查看完整回答
反对 回复 2023-09-15
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

如果我理解正确的话,您将获得一个包含 4 列和可变行数的表,并且您希望将其转换为具有可变列数的表。为此,使用每一项都与前一项不同的数据结构可能会使一切变得比它需要的更困难。我建议你使用固定结构:


// I'm assuming you have a PHP array as starting point

$input = [

    [

        'membername' => 'NAME',

        'bookingdate' => '2020-02-03',

        'categoryid' => 1,

        'dailyworkhourssum' => '7.70',

    ],

    [

        'membername' => 'NAME',

        'bookingdate' => '2020-02-03',

        'categoryid' => 3,

        'dailyworkhourssum' => '1.2',

    ],

    [

       'membername' => 'NAME',

       'bookingdate' => '2020-02-05',

       'categoryid' => 3,

       'dailyworkhourssum' => '7.70',

    ],

];


$output = [];

foreach ($input as $data) {

    // We'll group by booking date

    if (!isset($output[$data['bookingdate']])) {

        $output[$data['bookingdate']] = [

            'membername' => $data['membername'],

            'bookingdate' => $data['bookingdate'],

            'categoryid' => $data['categoryid'],

            'dailyworkhourssum' => [],

        ];

    }

    // A single date may have several daily work hours

    $output[$data['bookingdate']]['dailyworkhourssum'][] = $data['dailyworkhourssum'];

}


// We discard array keys (we only needed them to group)

echo json_encode(array_values($output));

[{

    "membername": "NAME",

    "bookingdate": "2020-02-03",

    "categoryid": 1,

    "dailyworkhourssum": ["7.70", "1.2"]

}, {

    "membername": "NAME",

    "bookingdate": "2020-02-05",

    "categoryid": 3,

    "dailyworkhourssum": ["7.70"]

}]

无论您在何处使用此 JSON,您只需要循环该dailyworkhourssum数组即可。您可能还想在打印表格之前循环整个结构并保留一个计数器以确定最大列数,以便您可以在需要的地方绘制空单元格(表格是矩形的)。


查看完整回答
反对 回复 2023-09-15
  • 2 回答
  • 0 关注
  • 93 浏览

添加回答

举报

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