Как получить список уникальных свойств объекта

1

У меня есть массив объектов с свойством "category". Мне нужно получить список различных категорий, как я могу это сделать, учитывая, что у меня есть способ получить категорию из объекта? Ниже приведен список всех категорий в массиве, но, очевидно, имеет много повторяющихся категорий:

    foreach (getSourceCodes() as $source) {
        echo $source->getCategory();
    }
Теги:

3 ответа

3
Лучший ответ

Вы можете использовать array_unique() в php.

$categories = array();
foreach (getSourceCodes() as $source) {
    array_push($categories, $source->getCategory());
}
$categories = array_unique($categories);

Если категории многомерны, используйте этот метод для сериализации, затем получите уникальный массив, а затем измените его на массив.

$categories = array_map("unserialize", array_unique(array_map("serialize", $categories)));
  • 0
    Это работает отлично, большое спасибо.
1

Если вы используете категорию как ключ массива, она будет уникальной по определению.

foreach (getSourceCodes() as $source) {
    // The value is irrelevant. You can use a counter if you want to keep track of that.
    $an_array[$source->getCategory()] = true;
    // The key is just overwritten for duplicate values of getCategory()
}

// Then you can use array_keys to get the keys as values.
var_dump(array_keys($an_array));
  • 0
    Очень признателен, предпочел только другой ответ, так как было больше объяснений!
  • 0
    и тогда вы идете и объясняете это, ура! ;)
0

Не знаете, в каком формате находится ваш список, но предполагается значения, разделенные запятыми...

$aCategories = array();
$aList = array();

    foreach (getSourceCodes() as $source) {
          // Get categories as comma separated string list???
           $sList = $source->getCategory();

           // Convert string list to array
           $aTmpList = explode(",",$sList);

           //Check temp list against current list for new categories
           $aDiffList = array_diff($aList,$atmpList);

           //Merge new categories into current list
            $aList = array_merge($aDiffList,$aList);
       }
       // Convert array to string list
       $sCategories = implode(",", $aList);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню