鍍金池/ 問答/數(shù)據(jù)分析&挖掘  Java  PHP/ PHP數(shù)組如何重組 按我這個(gè)格式重新組合下

PHP數(shù)組如何重組 按我這個(gè)格式重新組合下

這個(gè)問題困擾了我?guī)滋觳荒芩X了!怎么重新組合成新格式呢?

內(nèi)容隨意寫的。主要是格式!
sitePerEpisode 后面的數(shù)字 是集數(shù)

數(shù)據(jù)庫內(nèi)容:

$ceshi='優(yōu)酷視頻$$第1集$http://v.youku.com/$youku#第2集$http://v.youku.com/v_show$youku#第3集$http://v.youku.com/$$$芒果視頻$$第1集$http://vmguo.com$mgtv#第2集$http://v.mangguo.com$mgtv#第3集$http://v.mangguo.com$mgtv';

需要變成的格式

{
    "sitePerEpisode": {
        "1": [
            {
                "siteSource": "youku",
                "siteName": "優(yōu)酷視頻",
                "siteLink": "http://v.youku.com/"
            },
            {
                "siteSource": "mgtv",
                "siteName": "芒果視頻",
                "siteLink": "/video/?34-1-0.html"
            }
        ],
        "2": [
            {
                "siteSource": "youku",
                "siteName": "優(yōu)酷視頻",
                "siteLink": "/video/?34-0-1.html"
            },
            {
                "siteSource": "mgtv",
                "siteName": "芒果視頻",
                "siteLink": "/video/?34-1-1.html"
            }
        ],
        "3": [
            {
                "siteSource": "youku",
                "siteName": "優(yōu)酷視頻",
                "siteLink": "/video/?34-0-2.html"
            },
            {
                "siteSource": "mgtv",
                "siteName": "芒果視頻",
                "siteLink": "/video/?34-1-2.html"
            }
        ]
    }
}

以前是按播放源 a視頻 1 2 3 b視頻 1 2 3 c視頻 1 2 3
現(xiàn)在要求是 按集數(shù)
1 a視頻 b視頻 c視頻 2 a視頻 b視頻 c視頻 3 a視頻 b視頻 c視頻

回答
編輯回答
大濕胸

你的變量$ceshi好像錯(cuò)了我改了一下,不知道對不對

//錯(cuò)誤的
$ceshi='優(yōu)酷視頻$$第1集$http://v.youku.com/$youku#第2集$http://v.youku.com/v_show$youku#第3集$http://v.youku.com/$$$芒果視頻$$第1集$http://vmguo.com$mgtv#第2集$http://v.mangguo.com$mgtv#第3集$http://v.mangguo.com$mgtv';

//我?guī)湍阈薷牧?,其中少?youku這一部分
$ceshi='優(yōu)酷視頻$$第1集$http://v.youku.com/$youku#第2集$http://v.youku.com/v_show$youku#第3集$http://v.youku.com/$youku$$$芒果視頻$$第1集$http://vmguo.com$mgtv#第2集$http://v.mangguo.com$mgtv#第3集$http://v.mangguo.com$mgtv';

$result_array = array();

$temp = explode('$$$',$ceshi);
//var_dump($temp);
foreach($temp as $key=>$value){

    $temp_array = (explode('$$',$value));
    //當(dāng)前的類別
    $category = $temp_array[0];
    //內(nèi)容再次進(jìn)行歸類
    $temp_array = explode('#',$temp_array[1]);
    foreach($temp_array as $key=>$value){
        
        //當(dāng)前的集數(shù)
        $temp_value = explode('$',$value);
        $ep_number = preg_replace('/(第)||(集)/','',$temp_value[0]);
        
        //需要壓入的數(shù)組
        $temp_result['siteSource']= $temp_value[2];
        $temp_result['siteName']= $category;
        $temp_result['siteLink']= $temp_value[1];
    
        //壓入結(jié)果數(shù)組
        $result_array["sitePerEpisode"][$ep_number][]=$temp_result;

    }
}

//$result_array為你要的結(jié)果,你可以var_dump看一下
//var_dump($result_array);

//將結(jié)果數(shù)組轉(zhuǎn)化為json,中文字符會(huì)被轉(zhuǎn)化
$json_result = json_encode($result_array,true);
echo $json_result;

未轉(zhuǎn)化為json的array結(jié)果

array(1) {
  ["sitePerEpisode"]=>
  array(3) {
    [1]=>
    array(2) {
      [0]=>
      array(3) {
        ["siteSource"]=>
        string(5) "youku"
        ["siteName"]=>
        string(12) "優(yōu)酷視頻"
        ["siteLink"]=>
        string(19) "http://v.youku.com/"
      }
      [1]=>
      array(3) {
        ["siteSource"]=>
        string(4) "mgtv"
        ["siteName"]=>
        string(12) "芒果視頻"
        ["siteLink"]=>
        string(16) "http://vmguo.com"
      }
    }
    [2]=>
    array(2) {
      [0]=>
      array(3) {
        ["siteSource"]=>
        string(5) "youku"
        ["siteName"]=>
        string(12) "優(yōu)酷視頻"
        ["siteLink"]=>
        string(25) "http://v.youku.com/v_show"
      }
      [1]=>
      array(3) {
        ["siteSource"]=>
        string(4) "mgtv"
        ["siteName"]=>
        string(12) "芒果視頻"
        ["siteLink"]=>
        string(20) "http://v.mangguo.com"
      }
    }
    [3]=>
    array(2) {
      [0]=>
      array(3) {
        ["siteSource"]=>
        string(5) "youku"
        ["siteName"]=>
        string(12) "優(yōu)酷視頻"
        ["siteLink"]=>
        string(19) "http://v.youku.com/"
      }
      [1]=>
      array(3) {
        ["siteSource"]=>
        string(4) "mgtv"
        ["siteName"]=>
        string(12) "芒果視頻"
        ["siteLink"]=>
        string(20) "http://v.mangguo.com"
      }
    }
  }
}
2018年8月3日 20:04
編輯回答
焚音

兄弟,你這個(gè)排版真的讓人沒有幫你的欲望。。。而且你貼的json還格式錯(cuò)誤,更沒法幫了,還是先把問題排版改改吧。

上面的兄弟已經(jīng)回答過了,我這邊有另一種思路,算是php的黑科技,你也可以用來參考

function formatSite($site_str) {
    
        $sites_info = explode('$$$', $site_str);

        $result = [];
        foreach ($sites_info as $site_info) {
            list($site_name, $info) = explode('$$', $site_info);

            array_map(function ($item) use (&$result, $site_name) {
                preg_match('/.*(\d).*\$(.*)\$(.*)/', $item, $matched);
                list($number, $site_link, $site_source) = array_slice($matched, 1);
                $result['sitePerEpisode'][$number][] = [
                    'siteSource'=>$site_source,
                    'siteName'=>$site_name,
                    'siteLink'=>$site_link
                ];
            }, explode('#', $info));
        }
        return $result;
}

$str = '優(yōu)酷視頻$$第1集$http://v.youku.com/$youku#第2集$http://v.youku.com/v_show$youku#第3集$http://v.youku.com/$youku$$$芒果視頻$$第1集$http://vmguo.com$mgtv#第2集$http://v.mangguo.com$mgtv#第3集$http://v.mangguo.com$mgtv';
$result = formatSite($str);

思路是一樣的,而且邏輯上那位兄弟的解答更清晰,我只是用了一些黑科技

2017年5月15日 00:52
編輯回答
亮瞎她

遍歷一次就行了。你將你寫的原始PHP代碼貼上來。

2017年5月30日 17:09