使用しているテーブルは、カテゴリとビジネスの2つです。カテゴリテーブルは次のようになります。
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
この時点で、iprint_r($parentChildCategories)
の場合、次のようになります(他のカテゴリ配列の束を除き、1つだけに焦点を当てます)。
Array ( [0] => 81 [1] => 80 )
したがって、これは親カテゴリIDであり、子カテゴリIDでもあります。この親カテゴリには子が1つしかありませんが、他のカテゴリには複数の子がある場合があります。これは機能しているようです。
次に、各ビジネスカテゴリフィールドを調べ、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($ category_array)'とそれは私に次のようになります:
Array ( [0] => 80 [1] => 81 )
配列の値はと同じですが、$parentChildCategories
位置が異なります。したがって、in_arrayはそれを配列内にあるとは見なしません。
私はこれを理解しようとして壁に頭をぶつけています。これを行うためのより良い方法はありますか?私は明らかに何か間違ったことをしています。どんな助けでも大歓迎です。