我正在开发一个电子商务应用的产品搜索系统,在这里我将我的产品对象存储在一个数组中。现在,我希望能够搜索这些产品并找到属于某个类别的所有产品。 我尝试过使用foreach循环,但考虑到执行时间和必须循环的产品数量,这似乎并不够高效。这是最好的方法吗? 这就是我所做的:
public function sortByCategory( $category )
{
foreach ( $this->products as $product ) {
if ( $category == $product->getCategory() ) {
$this->result[] = $product;
}
}
}
答案 0 :(得分:1)
搜索非结构化/无序集合始终至少为O(n)
,因为每个元素都需要访问。如果它已经以某种方式排序了你可能能够找出更优化的算法,但是首先尝试手动排序代码,你甚至已经在O(n log n)
时间进行搜索!
但是,您可以采取任何措施来降低后续搜索/访问的开销。
学习,爱和利用哈希表的魔力(在php中这是关联数组' s)!他们会帮助您解决编码生涯中的许多问题!
只需对产品进行迭代,然后按类别名称将它们存储在数组的关联数组中:
$grouped = [];
foreach ( $products as $product ) {
$cat = $product->getCategory();
!empty($grouped[$cat])?:$grouped[$cat] = [];
$grouped[$cat][] = $product;
}
然后按名称获取特定类别:
$result = $grouped['SomeCategoryName'];
由于产品是对象,$grouped
关联数组中的子数组只是引用的数组 - 不是重复数据 - 因此很可能不会产生重大空间命中。
最后,只有O(n)
进行此分组,您只执行一次,从那时起检索O(1)
。