第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

將數(shù)組分解成多維數(shù)組(parent->child->sub-child)

將數(shù)組分解成多維數(shù)組(parent->child->sub-child)

PHP
慕婉清6462132 2023-05-12 14:47:24
我有一個(gè)數(shù)組($categories_final),看起來類似于:Array(    [0] => Accessories/Apron    [1] => Accessories/Banners    [2] => Accessories/Belts    [3] => Brand/Brand1    [4] => Brand/Brand2    [5] => Apparel/Men/Belts    [6] => Apparel/Men/Socks    [7] => Apparel/Women/Leggings)我試圖讓它看起來像這樣,所以我可以將它作為我商店的類別結(jié)構(gòu)添加到數(shù)據(jù)庫中:Array(    [Accessories] => Array        (            [0] => Apron            [1] => Banners            [2] => Belts        )    [Apparel] => Array        (            [0] => Men => Array                (                    [0] => Belts                    [1] => Socks                )            [1] => Women => Array                (                    [0] => Leggings                )        )        ...etc這是我到目前為止所得到的,但我無法弄清楚如何在 Men/ & Women/ 下添加孩子:$categories = array();foreach ($categories_final as $cat) {    $levels = explode('/', $cat);    if (isset($categories[$levels[0]])) {        if (!in_array($levels[1], $categories[$levels[0]])) {            $categories[$levels[0]][]= $levels[1];        }    }    else {        $categories[$levels[0]][]= $levels[1];    }}print_r($categories);再一次,我堅(jiān)持如何在他們各自的父母下添加 /Belts、/Socks 和 /Leggings。任何幫助表示贊賞,謝謝!
查看完整描述

3 回答

?
慕容3067478

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊

由于可以有無限數(shù)量的分支,您可能應(yīng)該有一個(gè)遞歸解決方案。我盡了最大努力得到了這段代碼:


$arr = ['Accessories/Apron', 'Accessories/Banners', 'Accessories/Belts','Brand/Brand1','Brand/Brand2',

        'Apparel/Men/Belts', 'Apparel/Men/Socks', 'Apparel/Women/Leggings'];


$final = [];

foreach ($arr as $branch) {

    $temp = branchRecursive($branch);

    $final = array_merge_recursive($final, $temp);

}




function branchRecursive($branch) {

    // explode only first

    $newBranch = explode('/', $branch, 2);


    // A leaf, no more branches

    if(count($newBranch) != 2) {


        return $newBranch[0];

    }


    $array [ $newBranch[0] ]= branchRecursive($newBranch[1]);

    return $array;


}

它返回這個(gè):


Array

(

    [Accessories] => Array

        (

            [0] => Apron

            [1] => Banners

            [2] => Belts

        )


    [Brand] => Array

        (

            [0] => Brand1

            [1] => Brand2

        )


    [Apparel] => Array

        (

            [Men] => Array

                (

                    [0] => Belts

                    [1] => Socks

                )


            [Women] => Leggings

        )


)

與您的代碼唯一不同的是


[Women] => Leggings

代替


[0] => Leggings

但我想睡覺,但我的腦袋不工作,所以如果有人能指出要改變的地方,我將不勝感激。我希望這不是什么大問題:)


查看完整回答
反對 回復(fù) 2023-05-12
?
慕絲7291255

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊

此代碼使您能夠創(chuàng)建任意數(shù)量的子分支。


$source = array('Accessories/Apron ' ,

        'Accessories/Banners',

        'Accessories/Belts',

        'Brand/Brand1',

        'Brand/Brand2',

        'Apparel/Men/Belts',

        'Apparel/Men/Socks',

        'Apparel/Women/Leggings'

    );


function convert($categories_final) {

    $categories = array();

    foreach ($categories_final as $cat) {

        $levels = explode('/', $cat);

        // get category

        $category_name = $levels[0];

        array_shift($levels);

        if(!array_key_exists($category_name,$categories)) {

            $categories[$category_name] = array();

        }

        $tmp = &$categories[$category_name] ;

        foreach($levels as $index => $val){

            if($index + 1 === count($levels) ){

                $tmp[] = $val; 

            } else {

                $i = find_index($tmp , $val);

                if( $i == count($tmp) ) { // object not found , we create a new sub array

                    $tmp[] = array($val => array());

                }

                $tmp = &$tmp[$i][$val];

            }

        }


    }

    return $categories;

}


function find_index($array , $key) {

    foreach($array as $i => $val ) {

        if(is_array($val) && array_key_exists($key , $val) ){

            return $i ;

        }

    }

    return count($array);

}


print_r(convert($source));

這是結(jié)果


Array

(

    [Accessories] => Array

        (

            [0] => Apron 

            [1] => Banners

            [2] => Belts

        )

    [Brand] => Array

        (

            [0] => Brand1

            [1] => Brand2

        )


    [Apparel] => Array

        (

            [0] => Array

                (

                    [Men] => Array

                        (

                            [0] => Belts

                            [1] => Socks

                        )

                )

            [1] => Array

                (

                    [Women] => Array

                        (

                            [0] => Leggings

                        )

                )

        )


)


查看完整回答
反對 回復(fù) 2023-05-12
?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊

一種方法是將數(shù)組項(xiàng)“轉(zhuǎn)換”為 json,然后解碼為數(shù)組。


我首先執(zhí)行中間步驟,其中字符串變?yōu)闊o效的 json,然后 preg_replace 使內(nèi)部變?yōu)閧}有效[]。

然后與結(jié)果合并。


$result =[];

foreach($arr as $val){

    $count = count(explode("/", $val));

    $str = '{"' . str_replace('/', '":{"', $val) . '"}' . str_repeat("}", $count-1);

    $json = preg_replace("/(.*)(\{)(.*?)(\})/", "$1[$3]", $str);

    $result = array_merge_recursive($result, json_decode($json, true));

}


Print_r($result);

https://3v4l.org/5i3SW


查看完整回答
反對 回復(fù) 2023-05-12
  • 3 回答
  • 0 關(guān)注
  • 187 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號