【发布时间】:2015-10-16 09:26:02
【问题描述】:
我正在实施此处显示的第一个答案:Finding Highest Value in Associative Array
但实际情况是,它将找到的第一个值分配为“最大值”,然后当它找到下一个最大值时,它也将“最大值”分配给该值。
当然,我的目标是只将“max”分配给最高值。
问题一定是我呈现价值观的方式。
这是数组(我每周将“max”分配给“sum”索引):
Array
(
[0] => stdClass Object
(
[userid] => 1
[week] => 1
[sum] => 28
[user] => al
)
[1] => stdClass Object
(
[userid] => 1
[week] => 2
[sum] => 33
[user] => al
)
[2] => stdClass Object
(
[userid] => 1
[week] => 3
[sum] => 29
[user] => al
)
...
[17] => stdClass Object
(
[userid] => 26
[week] => 1
[sum] => 14
[user] => bob
)
[18] => stdClass Object
(
[userid] => 26
[week] => 2
[sum] => 23
[user] => bob
)
[19] => stdClass Object
(
[userid] => 26
[week] => 3
[sum] => 35
[user] => bob
)
...
[34] => stdClass Object
(
[userid] => 27
[week] => 1
[sum] => 36
[user] => chuck
)
[35] => stdClass Object
(
[userid] => 27
[week] => 2
[sum] => 23
[user] => chuck
)
[36] => stdClass Object
(
[userid] => 27
[week] => 3
[sum] => 29
[user] => chuck
)
但我通过几个 foreach 循环传递数据:
<?php
$resultsByUser = array();
$temp = array();
foreach($results as $result) {
$resultsByUser[$result->user][$result->week] = $result->sum;
}
foreach($resultsByUser as $user => $resultsByWeek) {
print "<tr><td>$user</td>";
ksort($resultsByWeek);
foreach($resultsByWeek as $week => $sum) {
$temp[$week] = max(
isset($temp[$week]) ? $temp[$week] : $sum,
$sum);
if($week == $week) {
if($temp[$week] == $sum) { ?>
<td><?php echo $sum; ?><span><i class='fa fa-trophy'></i></span></td>
<?php } else { ?>
<td><?php echo $sum; ?></td>
<?php }
}
}
} ?>
如何强制 $temp[week] 又名“max”函数在分配奖杯图标之前循环遍历整个每周值的关联数组?
编辑: 在 cmets 之后,我已将最后几节修改为以下内容,但现在我没有将奖杯分配给任何价值。我错过了什么?
foreach($resultsByWeek as $week => $sum) {
$temp[$week] = max(
isset($temp[$week]) ? $temp[$week] : $sum,
$sum); ?>
<td><?php echo $sum; }}?>
<?php if($sum == $temp[$week]) { ?> <span><i class='fa fa-trophy'></i></span></td>
<?php } ?>
【问题讨论】:
-
你能告诉我们你的预期输出吗?
-
预期的输出是只将fa-trophy图标分配给每周的最高值
-
先执行整个循环,然后在循环完成后使用
max的值输出。 -
if($week == $week)有什么意义?这怎么可能是假的? -
在完成循环之前,您无法知道每周的最高值。在循环期间显示奖杯图标没有意义。
标签: php arrays foreach max associative-array