Считать уникальные массивы внутри массива в PHP? - PullRequest
1 голос
/ 20 апреля 2011

У меня есть массив, содержащий другие массивы:

Array
(
    [0] => Slip Object
        (
            [userId:protected] => 1
            [parentSlipId:protected] => 0
            [id:protected] => 25
            [madeDatetime:protected] => 2011-04-19 17:13:09
            [stake:protected] => 34.00
            [status:protected] => 6
        )

    [1] => Slip Object
        (
            [userId:protected] => 1
            [parentSlipId:protected] => 0
            [id:protected] => 25
            [madeDatetime:protected] => 2011-04-19 17:13:09
            [stake:protected] => 34.00
            [status:protected] => 6
        )

    [2] => Slip Object
        (
            [userId:protected] => 1
            [parentSlipId:protected] => 0
            [id:protected] => 24
            [madeDatetime:protected] => 2011-04-18 11:31:26
            [stake:protected] => 13.00
            [status:protected] => 6
        )    
)

Какой лучший способ подсчета уникальных массивов?

Ответы [ 2 ]

3 голосов
/ 20 апреля 2011

Вне моей головы вы можете попробовать:

$hashes = array();
$uniques = 0;
foreach($array as $slip) {
    $hash = sha1(serialize($slip));
    if(!in_array($hash, $hashes)) {
        ++$uniques;
        $hashes[] = $hash;
    }
}
var_dump($uniques); // prints total number of unique objects.

Редактировать: @ Идея biakaveron выглядит лучше и может быть адаптирована к:

$uniques = count(array_unique($array, SORT_REGULAR));
var_dump($uniques); // prints total number of unique objects.
0 голосов
/ 20 апреля 2011

Этот предыдущий вопрос имеет различные решения для удаления дублирующихся массивов из массива. Если вы реализуете любой из них, а затем используете sizeof () в возвращаемом массиве, у вас будет решение.

например:

<?php
$yourarray = array();

$tmp = array ();

foreach ($yourarray as $row) 
    if (!in_array($row,$tmp)) array_push($tmp,$row);

echo sizeof($tmp);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...