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);
這樣你就可以擺脫字符串鍵了。

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數組即可。您可能還想在打印表格之前循環整個結構并保留一個計數器以確定最大列數,以便您可以在需要的地方繪制空單元格(表格是矩形的)。
- 2 回答
- 0 關注
- 123 瀏覽
添加回答
舉報