防止数组重复

时间:2014-09-12 13:25:29

标签: php arrays

我正在寻求一些帮助。请看下面的数组。在我拥有的数组中,相同的数据已附加到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连接,以&#34; 116,117,118和#34;的格式显示项目ID。但是,我不想将数据重复3次,而是希望将其显示一次。那可能吗?我已经尝试过使用array_unique,但是它剥离了很多数据本身。所以任何帮助都会受到赞赏。

由于

2 个答案:

答案 0 :(得分:0)

在显示之前,您可以先将它们过滤掉。可能有更好的解决方案,但首先想到的是在子阵列上制作 json_encode ,然后使用 array_unique 并解码数据。 E.g。

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

答案 1 :(得分: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文档。