0

0

关于日常收费计算的代码逻辑(php)

php中文网

php中文网

发布时间:2016-06-20 12:45:17

|

1377人浏览过

|

来源于php中文网

原创

假设,有a,b,c三个人住在一起,需要开发一个网站来记录他们日常花费,比如买菜等等。那么数据表该怎么设计呢?另外这些数据怎么运算到每个人总共要付出多少钱呢?
以下是我的代码:
//$adata里面的每个数组表示每天的消费记录, money:当天总费用,  mean:人均费用 ,其他的表示 用户名 : 1/0/-1 付钱人/不用付/要付钱人
$adata = [
 ['money' => 30, 'mean'=> 10, 'twl' => 1, 'xxx' => -1, 'yyy' => -1],  
 ['money' => 10, 'mean'=> 5, 'twl' => -1, 'xxx' => 1, 'yyy' => 0],
];
$count = 0;
$alist = [];
foreach($adata as $val){
foreach($val as $k => $v){
if($k == 'money'){
$count += $val['money'];
}elseif($k != 'mean' && $k != 'boss'){
$alist[$k][] = [
'out' => $v > 0 ? $val['money'] : 0,     //表示自己付出的钱
'in' => $v  'who' => $val['boss'],
];
}
}
}

$adata = [];
foreach($alist as $k => $v){
$in = $out = 0;
foreach($v as $key => $val){
$in += $val['in'];
$out += $val['out'];
}
$adata[$k] = [
'out' => $out,
'in' => $in,
];
}

结果是

这样还是不能知道 到底谁付钱给谁。求教

Digram
Digram

让Figma更好用的AI神器

下载


回复讨论(解决方案)

在数据里没有看到 boss

思路:
用户表,用户消费记录表
具体统计什么项目,根据用户消费表的项目对应。

user表
user_id
username
password

consumption表
id
user_id  用户id
consumption_type 消费类型:如:电费,买菜,坐车
money 金额
createtime 时间

其实我的意思是,要在数组里再添加 什么元素来标记 并计算 每个人相互之间应该给出多少钱 给谁

这个意思?

$aData = [ ['money' => 30, 'mean'=> 10, 'twl' => 1, 'xxx' => -1, 'yyy' => -1],   ['money' => 10, 'mean'=> 5, 'twl' => -1, 'xxx' => 1, 'yyy' => 0],];foreach($aData as $m) {  $u = array_diff_key($m, ['money' => 0, 'mean' => 0]);  arsort($u);  foreach($u as $k=>$v) {    if(!isset($r[$k])) $r[$k] = ['out' => 0, 'in' => 0, 'boss' => []];    if($v == 0) continue;    if($v == 1) {      $boss = $k;      $r[$k]['out'] += $m['money'];    }else {      $r[$k]['out'] += $m['mean'];      $r[$k]['boss'][] = $boss;      $r[$boss]['in'] += $m['mean'];    }  }}print_r($r);
Array(    [twl] => Array        (            [out] => 35            [in] => 20            [boss] => Array                (                    [0] => xxx                )        )    [yyy] => Array        (            [out] => 10            [in] => 0            [boss] => Array                (                    [0] => twl                )        )    [xxx] => Array        (            [out] => 20            [in] => 5            [boss] => Array                (                    [0] => twl                )        ))

差不多是这样,
假设 
$aData = [
 ['money' => 30, 'mean'=> 10, 'twl' => 1, 'xxx' => -1, 'yyy' => -1],  
  ['money' => 30, 'mean'=> 10, 'twl' => -1, 'xxx' => -1, 'yyy' => 1], 
 ['money' => 10, 'mean'=> 5, 'twl' => -1, 'xxx' => 1, 'yyy' => 0],
 ['money' => 20, 'mean'=> 10, 'twl' => 0, 'xxx' => 1, 'yyy' => -1],
 ['money' => 20, 'mean'=> 10, 'twl' => 0, 'xxx' => 1, 'yyy' => -1],
 ['money' => 20, 'mean'=> 10, 'twl' => 0, 'xxx' => 1, 'yyy' => -1],
];

感觉算出来的数据又不太准了

你可以一笔一笔的算

$aData = [ ['money' => 30, 'mean'=> 10, 'twl' => 1, 'xxx' => -1, 'yyy' => -1],    ['money' => 30, 'mean'=> 10, 'twl' => -1, 'xxx' => -1, 'yyy' => 1],  ['money' => 10, 'mean'=> 5, 'twl' => -1, 'xxx' => 1, 'yyy' => 0], ['money' => 20, 'mean'=> 10, 'twl' => 0, 'xxx' => 1, 'yyy' => -1], ['money' => 20, 'mean'=> 10, 'twl' => 0, 'xxx' => 1, 'yyy' => -1], ['money' => 20, 'mean'=> 10, 'twl' => 0, 'xxx' => 1, 'yyy' => -1],];foreach($aData as $id=>$m) {  $u = array_diff_key($m, ['money' => 0, 'mean' => 0]);  arsort($u);  foreach($u as $k=>$v) {    if($v == 0) continue;    if($v == 1) {      $boss = $k;      $r[$k][] = ['id' => $id, 'out' => $m['money']];    }else {      $r[$k][] = ['id' => $id, 'out' => $m['mean'], 'boss' => $boss];      $r[$boss][] = ['id' => $id, 'in' => $m['mean'], 'boss' => $k];    }  }}print_r($r);
Array(    [twl] => Array        (            [0] => Array                (                    [id] => 0                    [out] => 30                )            [1] => Array                (                    [id] => 0                    [in] => 10                    [boss] => yyy                )            [2] => Array                (                    [id] => 0                    [in] => 10                    [boss] => xxx                )            [3] => Array                (                    [id] => 1                    [out] => 10                    [boss] => yyy                )            [4] => Array                (                    [id] => 2                    [out] => 5                    [boss] => xxx                )        )    [yyy] => Array        (            [0] => Array                (                    [id] => 0                    [out] => 10                    [boss] => twl                )            [1] => Array                (                    [id] => 1                    [out] => 30                )            [2] => Array                (                    [id] => 1                    [in] => 10                    [boss] => xxx                )            [3] => Array                (                    [id] => 1                    [in] => 10                    [boss] => twl                )            [4] => Array                (                    [id] => 3                    [out] => 10                    [boss] => xxx                )            [5] => Array                (                    [id] => 4                    [out] => 10                    [boss] => xxx                )            [6] => Array                (                    [id] => 5                    [out] => 10                    [boss] => xxx                )        )    [xxx] => Array        (            [0] => Array                (                    [id] => 0                    [out] => 10                    [boss] => twl                )            [1] => Array                (                    [id] => 1                    [out] => 10                    [boss] => yyy                )            [2] => Array                (                    [id] => 2                    [out] => 10                )            [3] => Array                (                    [id] => 2                    [in] => 5                    [boss] => twl                )            [4] => Array                (                    [id] => 3                    [out] => 20                )            [5] => Array                (                    [id] => 3                    [in] => 10                    [boss] => yyy                )            [6] => Array                (                    [id] => 4                    [out] => 20                )            [7] => Array                (                    [id] => 4                    [in] => 10                    [boss] => yyy                )            [8] => Array                (                    [id] => 5                    [out] => 20                )            [9] => Array                (                    [id] => 5                    [in] => 10                    [boss] => yyy                )        ))

嗯,非常感谢。你的思路给了我很大的帮助。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

0

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

58

2025.12.24

添加脚注通用方法
添加脚注通用方法

本专题整合了添加脚注方法合集,阅读专题下面的文章了解更多内容。

1

2025.12.24

重启电脑教程汇总
重启电脑教程汇总

本专题整合了重启电脑操作教程,阅读下面的文章了解更多详细教程。

3

2025.12.24

纸张尺寸汇总
纸张尺寸汇总

本专题整合了纸张尺寸相关内容,阅读专题下面的文章了解更多内容。

5

2025.12.24

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
php初学者入门课程
php初学者入门课程

共10课时 | 0.6万人学习

CodeIgniter3(CI3)基础教程(全)
CodeIgniter3(CI3)基础教程(全)

共37课时 | 4.5万人学习

React从入门到精通视频教程
React从入门到精通视频教程

共140课时 | 59.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号