@goober-cripto

Как массив из обьектов сделать уникальным?

есть массив классов
<?php

class Millet {
    public $name = "Пшеница";
}

class Grechka {
    public $name = "Гречка";
}


$pole = array();

for($i=1;$i<=5;$i++){
    $pole[]=new Millet;
}

for($i=1;$i<=6;$i++){
    $pole[]=new Grechka;
}

$pole: array(11)
> 0: Millet
> 1: Millet
> 2: Millet
> 3: Millet
> 4: Millet
> 5: Millet
> 6: Grechka
> 7: Grechka
> 8: Grechka
> 9: Grechka
> 10: Grechka

как посчитать каждый класс в этом массиве?
но способ универсальный, если бы я и добавил новый класс допустим сорняк, он бы вивел мне его и его коичество
и вывести таким образом в консоле ?
$pole: array(3)
> 0: Millet
       $count = 6
> 1: Grechka
        $count = 5
> 3: Сорняк
        $count = 5
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
v3shin
@v3shin
Веб-шаман
Пробегаетесь foreach'ем по $pole и для каждого найденного $poleEntity смотрите get_class($poleEntity). А что дальше делать с этим значением - думаю, догадаетесь сами. ;)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Если отвечать на вопрос, который в заголовке, и который не имеет никакого отношения к озвученной задаче: сначала надо определиться, как отличать объекты друг от друга.

Если надо посчитать всего лишь классы, то методика всегда одинаковая: исходный массив перебирается в цикле, и создаётся новый массив, где ключом является значение, которое надо подсчитать, а значением - его количество.
Ответ написан
toxa82
@toxa82
$names = array_map(function ($item) {
    return $item->name; // или get_class($item) тогда в ключах array_count_values будет имя класса
}, $pole);
$group = array_count_values($names);
var_dump($group);
//array(2) {
//  ["Пшеница"]=> int(5)
//  ["Гречка"]=> int(6)
//}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы