У меня есть массив объектов с свойством "category". Мне нужно получить список различных категорий, как я могу это сделать, учитывая, что у меня есть способ получить категорию из объекта? Ниже приведен список всех категорий в массиве, но, очевидно, имеет много повторяющихся категорий:
foreach (getSourceCodes() as $source) {
echo $source->getCategory();
}
Вы можете использовать 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)));
Если вы используете категорию как ключ массива, она будет уникальной по определению.
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));
Не знаете, в каком формате находится ваш список, но предполагается значения, разделенные запятыми...
$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);