0

私は次のような配列を持っています

                Array
                (
                    [0] => Array
                        (
                            [id] => 81
                            [cata_key] => 908cbbcb86a1cf64b67c96ff
                            [cata_name] => Lunch
                            [app_key] => 2fabc0d9447c6375657dead4
                            [parentid] => 0
                            [subcategories] => Array
                                (
                                )

                        )

                    [1] => Array
                        (
                            [id] => 80
                            [cata_key] => baac98b4e73c05ebbf45bdc6
                            [cata_name] => Break Fast
                            [app_key] => 2fabc0d9447c6375657dead4
                            [parentid] => 0
                            [subcategories] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 82
                                            [cata_key] => 5970b7afc450ef3b24573de9
                                            [cata_name] => Rise Products
                                            [app_key] => 2fabc0d9447c6375657dead4
                                            [parentid] => 80
                                            [subcategories] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [id] => 83
                                                            [cata_key] => 82e36d8f821e14fc8db1d4da
                                                            [cata_name] => Dosha
                                                            [app_key] => 2fabc0d9447c6375657dead4
                                                            [parentid] => 82
                                                            [subcategories] => Array
                                                                (
                                                                    [0] => Array
                                                                        (
                                                                            [id] => 84
                                                                            [cata_key] => 49730020d850439dd7de8747
                                                                            [cata_name] => Masala Dosha
                                                                            [app_key] => 2fabc0d9447c6375657dead4
                                                                            [parentid] => 83
                                                                            [subcategories] => Array
                                                                                (
                                                                                )

                                                                        )

                                                                )

                                                        )

                                                )

                                        )

                                )

                        )

                )

特定の内部配列 ID からルート インデックス付きサブ配列の深さを見つけたいと思います。たとえば、parentid=0 からルート インデックス付き配列の深さを見つけたいのですが、それは 1 である必要があります。parentId=0/80/82/83 からのルート インデックス付きサブ配列の深さは 4 である必要があります。

実際、私の目的は配列の深さを制限することです。深さ制限があるはずです。したがって、この配列にサブ配列を追加しようとすると、現在の配列の深さを確認する必要があります。たとえば、配列の深さの制限は 4 で、誰でも cata_name= Masala Dosha の下にサブ配列を追加しようとすると、すでに深さに達しており、新しいサブ配列を追加することはできません。しかし同時に、サブ配列を [cata_name] => lunch の下に追加できます。これは、深さが 1 しかなく、深さの制限が 4 であるためです。

4

2 に答える 2

0

これを試してください、うまくいきますが、私はこれが好きではありません

http://sandbox.onlinephpfunctions.com/code/9922bf9abec89477e5bd3a81c41feb953db604a1

$a=array(
array('id'=>81),
array('id'=>80,'subcategories'=>array('id'=>82,'subcategories'=>array('id'=>83,'subcategories'=>array('id'=>84,'subcategories'=>array())))),
);

echo "80:" . test($a,80);
echo PHP_EOL;
echo "81:" . test($a,81);
echo PHP_EOL;
echo "82:" . test($a,82);
echo PHP_EOL;
echo "83:" . test($a,83);


function test($a,$key){
    $aa=array();
    foreach($a as $v){
    $b=array();
    $content=print_r($v,true);
    $b['content']=$content;
    if(preg_match('/ {28}\[/',$content)){
    $b['over']=1;
    }else{
    $b['over']=0;
    }
    $aa[]=$b;
    }

    foreach($aa as $v){

        if(preg_match('/\[id\] => '.$key.'/',$v['content'])){
            return $v['over'];

        }

    }
    return 0;

}

それから

80:1
81:0
82:1
83:1
于 2013-04-24T06:09:38.337 に答える