Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 复杂数组排序_Php_Arrays_Json_Sorting - Fatal编程技术网

Php 复杂数组排序

Php 复杂数组排序,php,arrays,json,sorting,Php,Arrays,Json,Sorting,我想用php对这个json数组进行排序,但我不知道怎么做。 我想要最新一季和最新一集,最新一季最新一集,第二集,等等 $episodelist = json_decode(file_get_contents('cache/episodes.json'), true); $episodes = $episodelist["doctor who (2005)"]; json数组: "doctor who (2005)": { "1": { "link": "

我想用php对这个json数组进行排序,但我不知道怎么做。
我想要最新一季和最新一集,最新一季最新一集,第二集,等等

$episodelist = json_decode(file_get_contents('cache/episodes.json'), true);
$episodes = $episodelist["doctor who (2005)"];
json数组:

"doctor who (2005)": {
        "1": {
            "link": "https:\/\/eztv-proxy.net\/\/ep\/58259\/doctor-who-extra-s01e03-robot-of-sherwood-pdtv-x264-deadpool\/",
            "name": "Doctor Who Extra S01E03 Robot Of Sherwood PDTV x264-DEADPOOL (124.73 MB)",
            "season": "1",
            "episode": "3",
            "magnet": "magnet:?xt=urn:btih:DZ7H4EWP2XW6YRYIXEIPMULETLASGDAF&dn=Doctor.Who.Extra.S01E03.Robot.Of.Sherwood.PDTV.x264-DEADPOOL&tr=udp:\/\/tracker.openbittorrent.com:80&tr=udp:\/\/tracker.publicbt.com:80&tr=udp:\/\/tracker.istole.it:80&tr=udp:\/\/open.demonii.com:80&tr=udp:\/\/tracker.coppersurfer.tk:80"
        },
        "2": {
            "link": "https:\/\/eztv-proxy.net\/\/ep\/58254\/doctor-who-2005-8x03-robot-of-sherwood-720p-hdtv-x264-fov\/",
            "name": "Doctor Who 2005 8x03 Robot Of Sherwood 720p HDTV x264-FoV (1.02 GB)",
            "season": "8",
            "episode": "3",
            "magnet": "magnet:?xt=urn:btih:S25AOAFO5ZUGXMZ52ZI2OUD5S5TD4ZBI&dn=Doctor.Who.2005.8x03.Robot.Of.Sherwood.720p.HDTV.x264-FoV&tr=udp:\/\/tracker.openbittorrent.com:80&tr=udp:\/\/tracker.publicbt.com:80&tr=udp:\/\/tracker.istole.it:80&tr=udp:\/\/open.demonii.com:80&tr=udp:\/\/tracker.coppersurfer.tk:80"
        },
        "3": {
            "link": "https:\/\/eztv-proxy.net\/\/ep\/58252\/doctor-who-extra-s01e02-into-the-dalek-720p-webrip-x264-c4tv\/",
            "name": "Doctor Who Extra S01E02 Into The Dalek 720p Webrip x264-C4TV (203.70 MB)",
            "season": "1",
            "episode": "2",
            "magnet": "magnet:?xt=urn:btih:FQ6CNHRGQSRKFWIX63JGG4KWLVVOZJQX&dn=Doctor.Who.Extra.S01E02.Into.The.Dalek.720p.Webrip.x264-C4TV&tr=udp:\/\/tracker.openbittorrent.com:80&tr=udp:\/\/tracker.publicbt.com:80&tr=udp:\/\/tracker.istole.it:80&tr=udp:\/\/open.demonii.com:80&tr=udp:\/\/tracker.coppersurfer.tk:80"
        },
        "4": {
            "link": "https:\/\/eztv-proxy.net\/\/ep\/58251\/doctor-who-extra-s01e02-into-the-dalek-webrip-x264-c4tv\/",
            "name": "Doctor Who Extra S01E02 Into The Dalek Webrip x264-C4TV (81.13 MB)",
            "season": "1",
            "episode": "2",
            "magnet": "magnet:?xt=urn:btih:OZ7O2O3FE7RADBGOAJEE4UMBROPO7CW7&dn=Doctor.Who.Extra.S01E02.Into.The.Dalek.Webrip.x264-C4TV&tr=udp:\/\/tracker.openbittorrent.com:80&tr=udp:\/\/tracker.publicbt.com:80&tr=udp:\/\/tracker.istole.it:80&tr=udp:\/\/open.demonii.com:80&tr=udp:\/\/tracker.coppersurfer.tk:80"
        },
        "5": {
            "link": "https:\/\/eztv-proxy.net\/\/ep\/58248\/doctor-who-2005-s08e03-hdtv-x264-tla\/",
            "name": "Doctor Who 2005 S08E03 HDTV x264-TLA (399.11 MB)",
            "season": "8",
            "episode": "3",
            "magnet": "magnet:?xt=urn:btih:SYDVQP4NMZJ5MQ2CEIOPZWUBLQWNKKHO&dn=Doctor.Who.2005.S08E03.HDTV.x264-TLA&tr=udp:\/\/tracker.openbittorrent.com:80&tr=udp:\/\/tracker.publicbt.com:80&tr=udp:\/\/tracker.istole.it:80&tr=udp:\/\/open.demonii.com:80&tr=udp:\/\/tracker.coppersurfer.tk:80"
        }
我希望它成为的阵列:

"doctor who (2005)": {
        "1": {
            "link": "https:\/\/eztv-proxy.net\/\/ep\/58248\/doctor-who-2005-s08e03-hdtv-x264-tla\/",
            "name": "Doctor Who 2005 S08E03 HDTV x264-TLA (399.11 MB)",
            "season": "8",
            "episode": "3",
            "magnet": "magnet:?xt=urn:btih:SYDVQP4NMZJ5MQ2CEIOPZWUBLQWNKKHO&dn=Doctor.Who.2005.S08E03.HDTV.x264-TLA&tr=udp:\/\/tracker.openbittorrent.com:80&tr=udp:\/\/tracker.publicbt.com:80&tr=udp:\/\/tracker.istole.it:80&tr=udp:\/\/open.demonii.com:80&tr=udp:\/\/tracker.coppersurfer.tk:80"
        },
        "2": {
            "link": "https:\/\/eztv-proxy.net\/\/ep\/58254\/doctor-who-2005-8x03-robot-of-sherwood-720p-hdtv-x264-fov\/",
            "name": "Doctor Who 2005 8x03 Robot Of Sherwood 720p HDTV x264-FoV (1.02 GB)",
            "season": "8",
            "episode": "3",
            "magnet": "magnet:?xt=urn:btih:S25AOAFO5ZUGXMZ52ZI2OUD5S5TD4ZBI&dn=Doctor.Who.2005.8x03.Robot.Of.Sherwood.720p.HDTV.x264-FoV&tr=udp:\/\/tracker.openbittorrent.com:80&tr=udp:\/\/tracker.publicbt.com:80&tr=udp:\/\/tracker.istole.it:80&tr=udp:\/\/open.demonii.com:80&tr=udp:\/\/tracker.coppersurfer.tk:80"
        },
        "3": {
            "link": "https:\/\/eztv-proxy.net\/\/ep\/58259\/doctor-who-extra-s01e03-robot-of-sherwood-pdtv-x264-deadpool\/",
            "name": "Doctor Who Extra S01E03 Robot Of Sherwood PDTV x264-DEADPOOL (124.73 MB)",
            "season": "1",
            "episode": "3",
            "magnet": "magnet:?xt=urn:btih:DZ7H4EWP2XW6YRYIXEIPMULETLASGDAF&dn=Doctor.Who.Extra.S01E03.Robot.Of.Sherwood.PDTV.x264-DEADPOOL&tr=udp:\/\/tracker.openbittorrent.com:80&tr=udp:\/\/tracker.publicbt.com:80&tr=udp:\/\/tracker.istole.it:80&tr=udp:\/\/open.demonii.com:80&tr=udp:\/\/tracker.coppersurfer.tk:80"
        },
        "4": {
            "link": "https:\/\/eztv-proxy.net\/\/ep\/58251\/doctor-who-extra-s01e02-into-the-dalek-webrip-x264-c4tv\/",
            "name": "Doctor Who Extra S01E02 Into The Dalek Webrip x264-C4TV (81.13 MB)",
            "season": "1",
            "episode": "2",
            "magnet": "magnet:?xt=urn:btih:OZ7O2O3FE7RADBGOAJEE4UMBROPO7CW7&dn=Doctor.Who.Extra.S01E02.Into.The.Dalek.Webrip.x264-C4TV&tr=udp:\/\/tracker.openbittorrent.com:80&tr=udp:\/\/tracker.publicbt.com:80&tr=udp:\/\/tracker.istole.it:80&tr=udp:\/\/open.demonii.com:80&tr=udp:\/\/tracker.coppersurfer.tk:80"
        },
        "5": {
            "link": "https:\/\/eztv-proxy.net\/\/ep\/58252\/doctor-who-extra-s01e02-into-the-dalek-720p-webrip-x264-c4tv\/",
            "name": "Doctor Who Extra S01E02 Into The Dalek 720p Webrip x264-C4TV (203.70 MB)",
            "season": "1",
            "episode": "2",
            "magnet": "magnet:?xt=urn:btih:FQ6CNHRGQSRKFWIX63JGG4KWLVVOZJQX&dn=Doctor.Who.Extra.S01E02.Into.The.Dalek.720p.Webrip.x264-C4TV&tr=udp:\/\/tracker.openbittorrent.com:80&tr=udp:\/\/tracker.publicbt.com:80&tr=udp:\/\/tracker.istole.it:80&tr=udp:\/\/open.demonii.com:80&tr=udp:\/\/tracker.coppersurfer.tk:80"
        }

我认为您需要一个具有以下comperator功能的
usort()

usort($array, function($a, $b){
    return $a['season'] * 1000 + $a['episode'] < $b['season'] * 1000 + $b['episode'] ? 1 : -1;
});
usort($array,function($a,$b){
返回$a[“季节”]*1000+a[“插曲”]<$b[“季节”]*1000+b[“插曲”]?1:-1;
});
解释
usort
函数使用提供的函数作为比较器来决定哪个元素是第一个。通过这种方式,它对所有元素进行排序。我不确定你是否必须把它倒过来。如果是这种情况,只需将
替换为一个code>。我使用因子
1000
使季节参数强于插曲参数。我假设每季的剧集不会超过999集

编辑 当然,您需要使用
json\u decode
将json字符串转换为php数组

编辑2
添加了内联if语句以使其正常工作(?1:-1)

您需要通过实现自定义排序。大致如下:

$episodelist = json_decode(file_get_contents('cache/episodes.json'), true);

foreach ($episodelist as &$show) {
    usort($show, function ($a, $b) {
            if ($a["season"] == $b["season"]) {
                if ($a["episode"] == $b["episode"]) {
                    return 0;
                }
                return ($a["episode"] > $b["episode"]) ? -1 : 1;
            }
            return ($a["season"] > $b["season"]) ? -1 : 1;
        }
    );
}

var_export($episodelist);
输出:
您有两个条目。那该怎么办呢?我有两个条目,因为有时候会有两个不同版本的剧集。雇佣一个开发者,或者试着用一个简单的例子来说明你尝试过的和没有达到预期效果的。这个网站不是一个“这是我的代码,现在给我建议修复它”你应该对你的要求有一个最低限度的了解。我现在就这样使用它,但它只返回1:print_r(usort($eposodelist,function($a,$b){return($a['season]*1000+$a['season'])<($b['season']*1000+$b['season']);它对我不起作用,我得到的数组和以前一样。数组('doctor who(2005)'=>数组(0=>数组('link'=>'somelink','name'=>'name','season'=>'1','eposion'=>'1','magnet'=>'magnet\u link'))
array (
    'doctor who (2005)' =>
        array (
            0 =>
                array (
                    'link' => 'https://eztv-proxy.net//ep/58248/doctor-who-2005-s08e03-hdtv-x264-tla/',
                    'name' => 'Doctor Who 2005 S08E03 HDTV x264-TLA (399.11 MB)',
                    'season' => '8',
                    'episode' => '3',
                    'magnet' => 'magnet:?xt=urn:btih:SYDVQP4NMZJ5MQ2CEIOPZWUBLQWNKKHO&dn=Doctor.Who.2005.S08E03.HDTV.x264-TLA&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.publicbt.com:80&tr=udp://tracker.istole.it:80&tr=udp://open.demonii.com:80&tr=udp://tracker.coppersurfer.tk:80',
                ),
            1 =>
                array (
                    'link' => 'https://eztv-proxy.net//ep/58254/doctor-who-2005-8x03-robot-of-sherwood-720p-hdtv-x264-fov/',
                    'name' => 'Doctor Who 2005 8x03 Robot Of Sherwood 720p HDTV x264-FoV (1.02 GB)',
                    'season' => '8',
                    'episode' => '3',
                    'magnet' => 'magnet:?xt=urn:btih:S25AOAFO5ZUGXMZ52ZI2OUD5S5TD4ZBI&dn=Doctor.Who.2005.8x03.Robot.Of.Sherwood.720p.HDTV.x264-FoV&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.publicbt.com:80&tr=udp://tracker.istole.it:80&tr=udp://open.demonii.com:80&tr=udp://tracker.coppersurfer.tk:80',
                ),
            2 =>
                array (
                    'link' => 'https://eztv-proxy.net//ep/58259/doctor-who-extra-s01e03-robot-of-sherwood-pdtv-x264-deadpool/',
                    'name' => 'Doctor Who Extra S01E03 Robot Of Sherwood PDTV x264-DEADPOOL (124.73 MB)',
                    'season' => '1',
                    'episode' => '3',
                    'magnet' => 'magnet:?xt=urn:btih:DZ7H4EWP2XW6YRYIXEIPMULETLASGDAF&dn=Doctor.Who.Extra.S01E03.Robot.Of.Sherwood.PDTV.x264-DEADPOOL&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.publicbt.com:80&tr=udp://tracker.istole.it:80&tr=udp://open.demonii.com:80&tr=udp://tracker.coppersurfer.tk:80',
                ),
            3 =>
                array (
                    'link' => 'https://eztv-proxy.net//ep/58252/doctor-who-extra-s01e02-into-the-dalek-720p-webrip-x264-c4tv/',
                    'name' => 'Doctor Who Extra S01E02 Into The Dalek 720p Webrip x264-C4TV (203.70 MB)',
                    'season' => '1',
                    'episode' => '2',
                    'magnet' => 'magnet:?xt=urn:btih:FQ6CNHRGQSRKFWIX63JGG4KWLVVOZJQX&dn=Doctor.Who.Extra.S01E02.Into.The.Dalek.720p.Webrip.x264-C4TV&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.publicbt.com:80&tr=udp://tracker.istole.it:80&tr=udp://open.demonii.com:80&tr=udp://tracker.coppersurfer.tk:80',
                ),
            4 =>
                array (
                    'link' => 'https://eztv-proxy.net//ep/58251/doctor-who-extra-s01e02-into-the-dalek-webrip-x264-c4tv/',
                    'name' => 'Doctor Who Extra S01E02 Into The Dalek Webrip x264-C4TV (81.13 MB)',
                    'season' => '1',
                    'episode' => '2',
                    'magnet' => 'magnet:?xt=urn:btih:OZ7O2O3FE7RADBGOAJEE4UMBROPO7CW7&dn=Doctor.Who.Extra.S01E02.Into.The.Dalek.Webrip.x264-C4TV&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.publicbt.com:80&tr=udp://tracker.istole.it:80&tr=udp://open.demonii.com:80&tr=udp://tracker.coppersurfer.tk:80',
                ),
        ),
)