我有一个像这样的数组:
$rowarray(
[0] => [PID] => 97162 [TID] => 340 [StatsID] => 49678
[1] => [PID] => 97165 [TID] => 340 [StatsID] => 49673
[2] => [PID] => 97167 [TID] => 340 [StatsID] => 49675
[3] => [PID] => 97162 [TID] => 340 [StatsID] => 49679
)
然后我的代码看起来像这样:
$cntr=0;
foreach($rowarray as $row)
{
echo "<tr><td>$row[PID] $row[TID] $row[StatsID] </td></tr>";
$cntr++;
}
我想做两件事:我希望能够不打印数组中的重复项,但打印具有不同值的附加列。所以我想要的输出是这样的:
97162 340 49678 49679
97165 340 49673
97167 340 49675
我从array_unique()开始,但它只返回:
假设仅StatsID更改(从问题中不清楚)
$map = array();
foreach($rowarray as $row){
$k = $row["PID"] . '-' . $row["TID"];
if( !isset( $map[$k] ) ){
$map[$k] = array();
}
array_push( $map[$k], $row["StatsId"] );
}
foreach($map as $k=>$v){
$row = explode( '-', $k );
echo "<tr><td>$row[0] $row[1] " . implode( " ", $v ) . " </td></tr>";
}
我会这样做:
- 首先对数组进行排序(使用
usort
按PID排序,然后按TID排序) - 初始化"最后"变量(
$last_PID
和$last_TID
)。它们将各自的值存储在循环 中。 - 在循环中,首先比较"当前"变量和"最后"变量,如果它们相同,则回显StatsID值。
- 如果它们不相同,则输出
<tr>
(但不是最终的</tr>
,因此循环的第一部分可以在必要时添加更多的StatsID值) - 仍然在循环中,在输出所有内容后,更新"last"变量。
- 循环结束后,输出最终的
</tr>
这可能不是最优的,但我很确定它会工作。
将$rowarray
结构体转换为数组映射的映射,如下所示:
$rowarray = array(
array('PID' => 97162, 'TID' => 340, 'StatsID' => 49678),
array('PID' => 97165, 'TID' => 340, 'StatsID' => 49673),
array('PID' => 97167, 'TID' => 340, 'StatsID' => 49675),
array('PID' => 97162, 'TID' => 340, 'StatsID' => 49679)
);
$keys = array();
foreach ($rowarray as $row) {
if (!is_array(@$keys[$row['TID']])) {
$keys[$rowarray['TID']] = array();
}
if (!is_array(@$keys[$row['TID']][$row['PID']])) {
$keys[$row['TID']][$row['PID']] = array();
}
$keys[$row['TID']][$row['PID']][] = $row['StatsID'];
}
foreach ($keys as $pid => $pid_arr) {
foreach ($pid_arr as $tid => $tid_arr) {
echo "<tr><td>$tid $pid " . implode(' ', $tid_arr) . "</td></tr>";
}
}
查看下面的代码
据我所知,要做到这一点,唯一的方法是循环遍历数组,创建一个新的唯一数组。
$unique = array();
foreach ($row as $value)
{
$key = $value['PID'];
if (isset($unique[$key]))
{
$unique[$key]['StatsID'] .= ' ' . $value['StatsID'];
}
else
{
$unique[$key] = $value;
}
}
现在,$unique将为您提供您正在寻找的结果,您可以循环遍历唯一数组并输出结果(如果需要,我还添加了计数器):
$count = count($unique);
foreach ($unique as $row)
{
echo "<tr><td>{$row['PID']} {$row['TID']} {$row['StatsID']} </td></tr>";
}