0

使用しているテーブルは、カテゴリとビジネスの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はそれを配列内にあるとは見なしません。

私はこれを理解しようとして壁に頭をぶつけています。これを行うためのより良い方法はありますか?私は明らかに何か間違ったことをしています。どんな助けでも大歓迎です。

4

2 に答える 2

1

in_array機能しない理由は、最初の配列が 2 番目の配列の要素であるかどうかをチェックするためです。もちろん、そうではありません。完全なロジックを実行せずに、比較を行うには、次を使用できますarray_diff

$ad = array_diff($parentChildCategories, $categories_array);
if(count($ad)) {
    echo 'yep';
}

$parentChildCategoriesこのコードは、 に存在しないすべての要素を検索します$categories_array。何もない場合は、出力しますyep

于 2012-06-10T19:15:36.597 に答える