假设,有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,
];
}
结果是
这样还是不能知道 到底谁付钱给谁。求教
回复讨论(解决方案)
在数据里没有看到 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 ) ))
嗯,非常感谢。你的思路给了我很大的帮助。

PHPsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIDstoredinacookie.Here'showtomanagethemeffectively:1)Startasessionwithsession_start()andstoredatain$_SESSION.2)RegeneratethesessionIDafterloginwithsession_regenerate_id(true)topreventsessi

In PHP, iterating through session data can be achieved through the following steps: 1. Start the session using session_start(). 2. Iterate through foreach loop through all key-value pairs in the $_SESSION array. 3. When processing complex data structures, use is_array() or is_object() functions and use print_r() to output detailed information. 4. When optimizing traversal, paging can be used to avoid processing large amounts of data at one time. This will help you manage and use PHP session data more efficiently in your actual project.

The session realizes user authentication through the server-side state management mechanism. 1) Session creation and generation of unique IDs, 2) IDs are passed through cookies, 3) Server stores and accesses session data through IDs, 4) User authentication and status management are realized, improving application security and user experience.

Tostoreauser'snameinaPHPsession,startthesessionwithsession_start(),thenassignthenameto$_SESSION['username'].1)Usesession_start()toinitializethesession.2)Assigntheuser'snameto$_SESSION['username'].Thisallowsyoutoaccessthenameacrossmultiplepages,enhanc

Reasons for PHPSession failure include configuration errors, cookie issues, and session expiration. 1. Configuration error: Check and set the correct session.save_path. 2.Cookie problem: Make sure the cookie is set correctly. 3.Session expires: Adjust session.gc_maxlifetime value to extend session time.

Methods to debug session problems in PHP include: 1. Check whether the session is started correctly; 2. Verify the delivery of the session ID; 3. Check the storage and reading of session data; 4. Check the server configuration. By outputting session ID and data, viewing session file content, etc., you can effectively diagnose and solve session-related problems.

Multiple calls to session_start() will result in warning messages and possible data overwrites. 1) PHP will issue a warning, prompting that the session has been started. 2) It may cause unexpected overwriting of session data. 3) Use session_status() to check the session status to avoid repeated calls.

Configuring the session lifecycle in PHP can be achieved by setting session.gc_maxlifetime and session.cookie_lifetime. 1) session.gc_maxlifetime controls the survival time of server-side session data, 2) session.cookie_lifetime controls the life cycle of client cookies. When set to 0, the cookie expires when the browser is closed.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

Zend Studio 13.0.1
Powerful PHP integrated development environment

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

WebStorm Mac version
Useful JavaScript development tools
