отсортировать или отфильтровать? это разные вещи. Вам надо, чтобы товар имел все указанные характеристики или что? Если да, то вам нужен HAVING COUNT и outer join тут не к месту
Леонид как вариант, берем за основу цвет правого верхнего пикселя, сравнивая цвет пикселей с эталоном вычисляем левый верхний и правый нижний пиксель, по ним вырезаем. Но если фон будет градиентный к примеру, уже не сработает, надо извращаться. Для обрезки пользователем можно использовать, например, jcrop
заменить \GuzzleHttp\Exception\RequestException на \Exception и будет перехватывать все вообще, или, если у них есть родительский, то можно его, чтобы только Guzzle ловил
это лишь мое мнение. Можете оставить как есть, можете вынести чтение файла в index.php а в класс передавать готовую строку, но тогда класс будет из одного метода). Решать вам)
namespace по пути до файла, т.е. он лежит в папке WordCounter, значит и namespace WordCounter;
и use изменится на use WordCounter\WordCounter; (или переименуйте папку в vendor, тогда будет use vendor\WordCounter.
в конструкторе ожидается строка - путь до файла, назовите переменную соответственно, например, $filePath, $text вводит в заблуждение.
что мне не нравится, обязанность класса посчитать слова в строке, которая придет ему в конструктор к примеру. А откуда берется эта строка он в принципе знать не обязан. К примеру я захочу брать строку не из файла, а скажем, запросом на какой то ресурс курлом, или доставать из базы, все придется переписывать. Нужно разделять обязанности.