0
  Time      To      Status  Off-Track   On-Track
10:28 AM    gf      6233          4         4
10:32 AM    dd      3835                    7
10:40 AM    ss      3235                    4
10:43 AM    ww      6621                    5
11:06 AM    zz      3837                    7

このテーブルが多次元配列であるとします。PHP を使用して他の列に影響を与えずに「On-Track」列から重複した値を非表示にする方法は?

このテーブルが必要です

  Time      To      Status  Off-Track   On-Track
10:28 AM    gf      6233          4         
10:32 AM    dd      3835                    
10:40 AM    ss      3235                    
10:43 AM    ww      6621                    5
11:06 AM    zz      3837                    
4

2 に答える 2

2

私があなたの質問を正しく理解したかどうかはわかりませんが、「on-track」列から重複を削除したいだけの場合は、array_uniqueメソッドを使用してそれを行うことができます。

$data = array(
    'time' => array('10.28','10.32','10.40','10.43','11.06'),
    'To' => array('gf','dd','ss','ww','zz'),
    'on-track' => array(4,7,5,4,7)
);

$data['on-track'] = array_unique($data['on-track']);

質問の編集を見ると、配列内で一度だけ表示される値だけが必要なようです。その場合、以下のコードを使用できます。

<?php

$data = array(
        'time' => array('10.28','10.32','10.40','10.43','11.06'),
        'To' => array('gf','dd','ss','ww','zz'),
        'on-track' => array(4,7,5,4,7)
    );
$data['on-track'] = get_values_with_count_one($data['on-track']);

echo '<pre>';
var_dump($data['on-track']);  //returns array(5);
echo '</pre>';

function get_values_with_count_one($input) {
    $count = array_count_values($input);
    $returnArray = array();

    foreach($count as $key=>$value) {
        if ($value === 1)
            $returnArray[] = $key;
    }

    return $returnArray;
}

さらに、重複する値の代わりに、-1などの特別な値を格納できます。したがって、最終的な配列はになりますarray(-1,-1,5,-1,-1)。出力するときは、-1を出力しないでください。そうすれば、5の場所を保存できます。

于 2012-04-26T14:42:53.183 に答える
0

これはどう?:

$aExists = array(); // array to fill values which already exists.
foreach ($aItems as &$aOneRow){
  if (isset($aExists[$aOneRow['On-Track']])){
    $aOneRow['On-Track'] = '';
  } else {
    $aExists[$aOneRow['On-Track']] = true;
  }
}
于 2012-04-26T15:08:11.753 に答える