PHP数组如何重组 按我这个格式重新组合下

这个问题困扰了我几天不能睡觉了!怎么重新组合成新格式呢?

内容随意写的。主要是格式!
sitePerEpisode 后面的数字 是集数

数据库内容:

$ceshi='优酷视频$$第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": "优酷视频",
                "siteLink": "http://v.youku.com/"
            },
            {
                "siteSource": "mgtv",
                "siteName": "芒果视频",
                "siteLink": "/video/?34-1-0.html"
            }
        ],
        "2": [
            {
                "siteSource": "youku",
                "siteName": "优酷视频",
                "siteLink": "/video/?34-0-1.html"
            },
            {
                "siteSource": "mgtv",
                "siteName": "芒果视频",
                "siteLink": "/video/?34-1-1.html"
            }
        ],
        "3": [
            {
                "siteSource": "youku",
                "siteName": "优酷视频",
                "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
现在要求是 按集数
1 a视频 b视频 c视频 2 a视频 b视频 c视频 3 a视频 b视频 c视频

阅读 3.2k
3 个回答

你的变量$ceshi好像错了我改了一下,不知道对不对

//错误的
$ceshi='优酷视频$$第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';

//我帮你修改了,其中少了$youku这一部分
$ceshi='优酷视频$$第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));
    //当前的类别
    $category = $temp_array[0];
    //内容再次进行归类
    $temp_array = explode('#',$temp_array[1]);
    foreach($temp_array as $key=>$value){
        
        //当前的集数
        $temp_value = explode('$',$value);
        $ep_number = preg_replace('/(第)||(集)/','',$temp_value[0]);
        
        //需要压入的数组
        $temp_result['siteSource']= $temp_value[2];
        $temp_result['siteName']= $category;
        $temp_result['siteLink']= $temp_value[1];
    
        //压入结果数组
        $result_array["sitePerEpisode"][$ep_number][]=$temp_result;

    }
}

//$result_array为你要的结果,你可以var_dump看一下
//var_dump($result_array);

//将结果数组转化为json,中文字符会被转化
$json_result = json_encode($result_array,true);
echo $json_result;

未转化为json的array结果

array(1) {
  ["sitePerEpisode"]=>
  array(3) {
    [1]=>
    array(2) {
      [0]=>
      array(3) {
        ["siteSource"]=>
        string(5) "youku"
        ["siteName"]=>
        string(12) "优酷视频"
        ["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) "优酷视频"
        ["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) "优酷视频"
        ["siteLink"]=>
        string(19) "http://v.youku.com/"
      }
      [1]=>
      array(3) {
        ["siteSource"]=>
        string(4) "mgtv"
        ["siteName"]=>
        string(12) "芒果视频"
        ["siteLink"]=>
        string(20) "http://v.mangguo.com"
      }
    }
  }
}

兄弟,你这个排版真的让人没有帮你的欲望。。。而且你贴的json还格式错误,更没法帮了,还是先把问题排版改改吧。

上面的兄弟已经回答过了,我这边有另一种思路,算是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 = '优酷视频$$第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);

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

遍历一次就行了。你将你写的原始PHP代码贴上来。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题