我一直在制造恶劣天气,但我几乎就在那里。
我有一系列带有付款值的员工(代码)列表,并且同一个代码的多个条目有不同的付款。
我正在尝试在汇总付款值时折叠重复的代码。
以下是调试回声的示例代码:
<?
$temprows = array(
array('empcode' => 3222, 'userfirstname' => 'Ted', 'usersurname' => 'Smyth', 'value' => 1000.00),
array('empcode' => 3222, 'userfirstname' => 'Ted', 'usersurname' => 'Smyth', 'value' => 1337.93),
array('empcode' => 3422, 'userfirstname' => 'Lynn', 'usersurname' => 'Byrne', 'value' => 346.47),
array('empcode' => 3422, 'userfirstname' => 'Lynn', 'usersurname' => 'Byrne', 'value' => 6.95),
array('empcode' => 3436, 'userfirstname' => 'Dave', 'usersurname' => 'Smith', 'value' => 233),
array('empcode' => 3436, 'userfirstname' => 'Dave', 'usersurname' => 'Smith', 'value' => 3455),
);
$now=date("Y-m-d H:i:s");
$output_arr=[];
$empcodes_used=array();
$j=0;
foreach ($temprows as $arr) {
// if empcode not encountered yet
if (!in_array($arr["empcode"], $empcodes_used)) {
// Create new row
echo("new row empcode =".$arr["empcode"]."<br><br>");
$output_arr[$j]["empcode"]=$arr["empcode"];
$output_arr[$j]["userfirstname"]=$arr["userfirstname"];
$output_arr[$j]["usersurname"]=$arr["usersurname"];
$output_arr[$j]["value"]=$arr["value"];
$output_arr[$j]["paid"]=$now;
// Add emcpode to empcodes_used
array_push($empcodes_used, $arr["empcode"]);
$j++;
} else {
// IN ENGLISH: Find the $output_arr with this empcode and increment it's value by the value of this arr
echo("empcode used=".$arr["empcode"]."<br>");
$k=0;
foreach ($output_arr as $foo) {
echo("k=".$k."<br>");
echo("foo empcode=".$foo["empcode"]." and arr empcode=".$arr["empcode"]."<br>");
if ($foo["empcode"]==$arr["empcode"]) {
// Increment the payment value of that empcode
echo("foo empcode = arr empcode<br>");
$foo["value"]+=$arr["value"];
$output_arr[$k]["value"]=$foo["value"];
echo("foo value=".$foo["value"]."<br><br>");
$k++;
}
}
}
}
echo("<pre>");
print_r($output_arr);
echo("</pre>");
?>
这是我想要的数组:
Array
(
[0] => Array
(
[empcode] => 3222
[userfirstname] => Ted
[usersurname] => Smyth
[value] => 2337.93
[paid] => 2016-09-15 10:51:30
)
[1] => Array
(
[empcode] => 3422
[userfirstname] => Lynn
[usersurname] => Byrne
[value] => 353.42
[paid] => 2016-09-15 10:51:30
)
[2] => Array
(
[empcode] => 3436
[userfirstname] => Dave
[usersurname] => Smith
[value] => 3688
[paid] => 2016-09-15 10:51:30
)
)
但这是我从上面的代码中获得的:
new row empcode =3222
empcode used=3222
k=0
foo empcode=3222 and arr empcode=3222
foo empcode = arr empcode
foo value=2337.93
new row empcode =3422
empcode used=3422
k=0
foo empcode=3222 and arr empcode=3422
k=0
foo empcode=3422 and arr empcode=3422
foo empcode = arr empcode
foo value=353.42
new row empcode =3436
empcode used=3436
k=0
foo empcode=3222 and arr empcode=3436
k=0
foo empcode=3422 and arr empcode=3436
k=0
foo empcode=3436 and arr empcode=3436
foo empcode = arr empcode
foo value=3688
Array
(
[0] => Array
(
[empcode] => 3222
[userfirstname] => Ted
[usersurname] => Smyth
[value] => 3688
[paid] => 2016-09-15 10:51:30
)
[1] => Array
(
[empcode] => 3422
[userfirstname] => Lynn
[usersurname] => Byrne
[value] => 346.47
[paid] => 2016-09-15 10:51:30
)
[2] => Array
(
[empcode] => 3436
[userfirstname] => Dave
[usersurname] => Smith
[value] => 233
[paid] => 2016-09-15 10:51:30
)
)
必须是
行$output_arr[$k]["value"]=$foo["value"];
这是错误的。
我真的很感激任何建议。从昨天开始,我一直在摇头。 TIA。
答案 0 :(得分:0)
这是一种方法:
$rows = array();
foreach($temprows as $temprow){
$empcode = $temprow['empcode'];
if(!isset($rows[$empcode])){
$rows[$empcode] = array(
'empcode' => $empcode,
'userfirstname' => $temprow['userfirstname'],
'usersurname' => $temprow['usersurname'],
'value' => 0,
'paid' => date("Y-m-d H:i:s"),
);
}
$rows[$empcode]['value'] += $temprow['value'];
}
希望这有帮助。
答案 1 :(得分:0)
试试这个:
$tempRows = array(
array('empcode' => 3222, 'userfirstname' => 'Ted', 'usersurname' => 'Smyth', 'value' => 1000.00),
array('empcode' => 3222, 'userfirstname' => 'Ted', 'usersurname' => 'Smyth', 'value' => 1337.93),
array('empcode' => 3422, 'userfirstname' => 'Lynn', 'usersurname' => 'Byrne', 'value' => 346.47),
array('empcode' => 3422, 'userfirstname' => 'Lynn', 'usersurname' => 'Byrne', 'value' => 6.95),
array('empcode' => 3436, 'userfirstname' => 'Dave', 'usersurname' => 'Smith', 'value' => 233),
array('empcode' => 3436, 'userfirstname' => 'Dave', 'usersurname' => 'Smith', 'value' => 3455),
);
$now = date("Y-m-d H:i:s");
$uniqueRows = [];
foreach($tempRows as $tempRow){
$key = $tempRow['userfirstname'] . "_" . $tempRow['userfirstname'];
if(!array_key_exists($key, $uniqueRows)){
$uniqueRows[$key] = $tempRow;
$uniqueRows[$key]['paid'] = $now;
}else{
$uniqueRows[$key]['value'] = $uniqueRows[$key]['value'] + $tempRow['value'];
}
}
// FILTER THE RESULTS ONLY:
$uniqueRows = array_values($uniqueRows);
var_dump($uniqueRows);