2014-09-12 76 views
0

我在尋找一些幫助。請看下面的數組。在我擁有的數組中,相同的數據已附加到3個項目,而單獨的項目具有其自己的唯一數據。防止重複陣列

Array 
(
[0] => Array 
    (
     [item] => 116 
     [stockcode] => UPGRADE 
     [qty] => 1 
     [nett] => 35.3 
     [vat] => 20 
     [gross] => 42.36 
    ) 
[1] => Array 
    (
     [item] => 117 
     [stockcode] => UPGRADE 
     [qty] => 1 
     [nett] => 35.3 
     [vat] => 20 
     [gross] => 42.36 
    ) 
[6] => Array 
    (
     [item] => 118 
     [stockcode] => UPGRADE 
     [qty] => 1 
     [nett] => 35.3 
     [vat] => 20 
     [gross] => 42.36 
    ) 
) 

Array 
(
[0] => Array 
    (
     [item] => 086 
     [stockcode] => INS VISIT 
     [qty] => 1 
     [nett] => 60 
     [vat] => 0 
     [gross] => 60 
    ) 
) 

在我的代碼,我有以下的嘗試和顯示數據:

foreach ($section['lines'] as $l) { 

    //if (count($plots) > 1) : 

    //echo count($l); 

    if ($l['is_stockcode']) { 
     $l['stockcode'] = '<a href="javascript:void(0);" class="stockcode-link" data-id="' . $l['stockcode'] . '" >' . $l['stockcode'] . '</a> '; 
    } 
    ?> 
    <tr> 
     <td class="text-right"><?php echo $l['qty']; ?></td> 
     <td><?php echo $l['stockcode']; ?></td>       
     <td class="text-right"><?php echo number_format($l['nett'], 2); ?></td> 
     <td class="text-right"><?php echo $l['vat']; ?>%</td> 
     <td class="text-right"><?php echo number_format($l['gross'], 2); ?></td> 
    </tr> 
    <?php 
    $total_nett += $l['nett']; 
    $total_gross += $l['gross']; 
}; 

我想實現的就是這個,看到從第一陣列中的數據是相同的,我只希望它被顯示一次。我做了一個php連接,以「116,117,118」的格式顯示項目標識符。但我不想讓這些數據重複3次,我只想讓它顯示一次。那可能嗎?我曾嘗試使用array_unique,但它剝離了很多數據本身。所以任何幫助,將不勝感激。

謝謝

+0

在第一個數組中,字段項不是唯一的。你關心保持這個領域嗎? – 2014-09-12 13:28:21

+0

請參閱http://stackoverflow.com/questions/2442230/php-getting-unique-values-of-a-multidimensional-array – 2014-09-12 13:29:09

+0

你應該看看[面向對象編程](https://en.wikipedia .ORG /維基/對象oriented_programming)。可以輕鬆編寫一個方法來比較值並刪除重複項(如果適用)。 – 2014-09-12 13:29:26

回答

0

您可以在顯示之前先將它們過濾掉。有可能是更好的解決方案,但首先想到的是我的腦海中正在製作json_encode在子陣列上,然後使用array_unique並解碼數據。例如。

$data = array(
     array('a' => 1, 'b' => 'st', 'c' => 3), 
     array('a' => 1, 'b' => 'st', 'c' => 3), 
     array('a' => 3, 'b' => 'st', 'c' => 1), 
     array('a' => 1, 'b' => 'st', 'c' => 3), 
    ); 

    $tmpData = array(); 
    foreach ($data as $record) { 
     $tmpData[] = json_encode($record); 
    } 

    $tmpData = array_unique($tmpData); 

    $result = array(); 
    foreach ($tmpData as $record) { 
     $result[] = json_decode($record, true); 
    } 
0

您可以嘗試使用數據集的哈希值作爲鍵。加入這樣的事情在你的代碼的foreach循環之前...

// array of unique results... 
$unique_array = []; 

// for earch set of data in your array... 
foreach ($your_array as $your_array_data) { 
    // remove ids - since those ARE unique... 
    unset($your_array_data['item']); 

    // create a unique hash sum of the data as the new array key 
    // this hash sum will be the same for identical data sets 
    $unique_array[md5(implode('', $your_array_data))] = $your_array_data; 
} 

見PHP的md5implode文檔的更多信息。

+0

沒錯。在對數據進行imploding和哈希處理之前,您需要從數據中取消設置/刪除任何唯一數據。 – chaseisabelle 2014-09-12 14:00:39