PHP比较单个数组中的值并输出差异

时间:2011-12-28 23:43:09

标签: php arrays

我有一个如下所示的数组:

$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()开始,但只返回:

97162 340 49678

4 个答案:

答案 0 :(得分:0)

这就是我要做的事情:

  • 首先对数组进行排序(使用usort按PID排序,然后按TID排序)
  • 初始化“最后”变量($last_PID$last_TID)。它们将在循环中存储相应的值
  • 在循环中,首先将“当前”变量与“最后”变量进行比较,如果它们相同则只回显StatsID值。
  • 如果它们不相同,请输出<tr>(但不是最终的</tr>,因此循环的第一部分可以根据需要添加更多的StatsID值)
  • 仍然在循环内部,在输出所有内容后,更新“最后”变量。
  • 循环后,输出最终</tr>

这可能不是最佳选择,但我确信它会起作用。

答案 1 :(得分:0)

$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>";
    }
}

See this code in action

答案 2 :(得分:0)

假设只有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>";
}

答案 3 :(得分:0)

据我所知,唯一的方法是循环创建一个新的唯一数组。

$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>";
}