如何在PHP中删除foreach中的重复项

时间:2017-11-09 12:52:59

标签: php

我在sql表中的var_dumping是这样的:

<?= "<pre>";  ?>
        <?php var_dump($presents); ?>
<?= "</pre>";  ?>

结果:

  [40]=>
  object(stdClass)#44 (7) {
    ["PersNr"]=>
    string(4) "101"
    ["Name"]=>
    string(7) "John"
    ["Typ"]=>
    string(1) "1"
    ["StartTime"]=>
    string(8) "11:43:52"
    ["LastTask"]=>
    string(3) "130"
  }
  [41]=>
  object(stdClass)#45 (7) {
    ["PersNr"]=>
    string(4) "102"
    ["Name"]=>
    string(6) "Maria"
    ["Typ"]=>
    string(1) "1"
    ["StartTime"]=>
    string(8) "08:01:04"
    ["LastTask"]=>
    string(3) "130"
  }
  [42]=>
  object(stdClass)#46 (7) {
    ["PersNr"]=>
    string(4) "103"
    ["Name"]=>
    string(9) "Jane"
    ["Typ"]=>
    string(1) "1"
    ["StartTime"]=>
    string(8) "06:54:15"
    ["LastTask"]=>
    string(3) "140"
  }

我想获取LastTask并删除重复的

<?php foreach($presents as $present) :?>
    <?php echo $present->LastTask ?>
<?php endforeach ?>

有了这个,我得到了 ...... 130 130 140 .... 是否有删除重复项的功能?

3 个答案:

答案 0 :(得分:6)

使用foreach为数组指定正确的值

$output = array();
foreach($presents as $present){
    $output[] = $present->LastTask;
}

然后使用array_unique过滤它。

$result = array_unique($output);

正如评论中所提到的,更好的解决方案可能是更改查询,以便它使用GROUP BY仅返回唯一的LastTask值。当且仅当查询结果中的其他信息($presents)未在其他地方使用时,这将是一个更好的解决方案。

答案 1 :(得分:0)

f(points, axes)

甚至是这样:

function removeDuplicates($array) {
    $arr = [];   
    foreach ($array as $obj) {
       $arr[$obj->LastTask] = $obj;
    }

    return $arr;
}

$presents = removeDuplicates($presents);

答案 2 :(得分:0)

如果您使用的是PHP 7,则可以使用array_column使用指定字段重新索引对象数组,这会产生删除重复项的副作用。这种方法的优点是它可以将整个对象保留为数组的一部分,以防输出中还需要其他字段:

$array = array_column($array, null, 'LastTask'));

请参阅https://eval.in/896268