0

我试图只打印出唯一值。因为我收到了一个巨大的对象数组,所以我现在尝试使用 PHP 的 ArrayObject 类进行迭代

$arrayobject = new ArrayObject($data);

$iterator = $arrayobject->getIterator();

while($iterator->valid()){
    echo $iterator->current()->USERID. " : " .$iterator->current()->SUBCATID."<br/>";
    $iterator->next();
}

这是目前的结果

201087 : 1
201146 : 1
201087 : 3
201087 : 2

如您所见,第一个数据有两个其他重复项,并且第一个和第二个数据具有相似的 subcatid .. 目标是,仅打印唯一的 userid 和 subcatid .. 鉴于示例代码,如何跳过这些重复数据我的起点?

4

2 回答 2

1

不太确定我是否理解这个问题,但也许......
您可以对数组进行排序并记住当前的用户 ID,以便您的脚本可以跳过重复项,直到它到达另一个 ID。

<?php
$data = data();
usort(
    $data,
    function($a,$b) {
        return strnatcmp($a->USERID, $b->USERID);
    }
);
$current = null;
foreach( $data as $e ) {
    if ( $current!=$e->USERID ) {
        $current = $e->USERID;
        echo $e->USERID, ' ', $e->SUBCATID, "\n";
    }
}   


function data() {

    $x = array(
        array(201087,1),
        array(201146,1),
        array(201087,3),
        array(201087,2),
        array(222222,3)
    );
    foreach($x as $y) {
        $o = new StdClass;
        $o->USERID = $y[0];
        $o->SUBCATID = $y[1];
        $data[] = $o;
    }
    return $data;
}

或者脚本会记住所有先前处理的 id,例如在 hashmap/array 中

<?php
$data = data();

$processed = array();
foreach( $data as $e ) {
    if ( !isset($processed[$e->USERID]) ) {
        $processed[$e->USERID] = true;
        echo $e->USERID, ' ', $e->SUBCATID, "\n";
    }
}   


function data() {

    $x = array(
        array(201087,1),
        array(201146,1),
        array(201087,3),
        array(201087,2),
        array(222222,3)
    );
    foreach($x as $y) {
        $o = new StdClass;
        $o->USERID = $y[0];
        $o->SUBCATID = $y[1];
        $data[] = $o;
    }
    return $data;
}

两个脚本都打印

201087 1
201146 1
222222 3
于 2012-11-12T08:59:16.550 回答
-1
$ids = array(1,2,3,4,4);
$ids = array_unique($ids); // remove duplicates
于 2012-11-12T08:25:45.167 回答