我有两个正在使用的表:类别和企业。类别表如下所示:
id name parent
1 Automotive NULL
2 Tires 1
3 Oil Change 1
4 Home Renovations NULL
5 Painting 4
6 Landscaping 4
7 Bathroom 4
基本上,任何具有父级的类别NULL
都是父级。任何它的子项都会在父列中引用它的 ID。简单的。
我将业务存储在一个表中,每个业务都有类别。类别的存储方式json_encode
如下:
["1","4","5","13"]
用户可以在不添加父类的情况下添加子类,所以有些商家只有子类。
如果我想获得父类别包括子类别的业务总数,这就是我正在做的事情:
$parent_categories = $this->db->order_by('name', 'asc')->get_where('categories', array('parent' => NULL));
$businesses = $this->db->select('category')->get('businesses');
foreach ($parent_categories->result() as $parent):
$child_categories = $this->db->order_by('name', 'asc')->get_where('categories', array('parent' => $parent->id));
$parentChildCategories = array();
array_push($parentChildCategories, $parent->id);
foreach($child_categories->result() as $child):
array_push($parentChildCategories, $child->id);
endforeach;
// CONTINUED BELOW
此时,如果 i print_r($parentChildCategories)
,我得到以下信息(不包括一堆其他类别数组,只关注一个):
Array ( [0] => 81 [1] => 80 )
所以这是父类别 ID 以及子类别 ID。这个父类别只有一个孩子,但其他人可能有多个。这似乎有效。
现在我想遍历每个业务类别字段,将json解码为PHP数组($categories_array
),然后查看上面的数组($parentChildCategories
)是否在其中。如果是,我会回应“是的”。
foreach($businesses->result() as $business):
$categories_array = json_decode($business->category);
if (in_array($parentChildCategories, $categories_array)):
echo 'yep';
endif;
endforeach;
问题是,我从来没有得到“是的”。没有。所以我 `print_r($categories_array)' 它给了我以下信息:
Array ( [0] => 80 [1] => 81 )
数组值与 相同$parentChildCategories
,但它们位于不同的位置。所以 in_array 并不认为它在数组中。
我正用头撞墙试图弄清楚这一点。有没有更好的方法来做到这一点?我显然做错了什么。任何帮助将不胜感激。