Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Sorting - Fatal编程技术网

PHP帮助按其他数组排序数组?异常情况

PHP帮助按其他数组排序数组?异常情况,php,arrays,sorting,Php,Arrays,Sorting,因此,我从数据库中获取数据,并将每个参数保存到不同的数组中。在这种情况下,我得到的是关于歌曲的数据。我真的不知道如何解释,所以这里有一个例子: $restracks=mysql_query("SELECT * FROM table_name WHERE (tag1='$tag1' OR tag1='$tag2' OR tag1='$tag3' OR tag2='$tag1' OR tag2='$tag2' OR tag2='$tag3' OR tag3='$tag1' OR tag3='

因此,我从数据库中获取数据,并将每个参数保存到不同的数组中。在这种情况下,我得到的是关于歌曲的数据。我真的不知道如何解释,所以这里有一个例子:

    $restracks=mysql_query("SELECT * FROM table_name WHERE (tag1='$tag1' OR tag1='$tag2' OR tag1='$tag3' OR tag2='$tag1' OR tag2='$tag2' OR tag2='$tag3' OR tag3='$tag1' OR tag3='$tag2' OR tag3='$tag3') ORDER BY trackid DESC");;

    while ($rowtracks=mysql_fetch_array($restracks)) {     
        $trackid=$rowtracks['trackid'];
        $artistid[$trackid]=$rowtracks['uid'];
        $trackname[$trackid]=$rowtracks['trackname'];
        $artists[$trackid]=$rowtracks['artists'];
        $filename[$trackid]=$rowtracks['filename'];
        $dllink[$trackid]=$rowtracks['dllink'];

        $tracktag1[$trackid]=$rowtracks['tag1'];
        $tracktag2[$trackid]=$rowtracks['tag2'];
        $tracktag3[$trackid]=$rowtracks['tag3'];
    }
这只是一段代码。然后,我用用户预先指定的标记计算每个曲目(至少1个,最多3个)的标记匹配,如下所示: //匹配计算器

        $match[$trackid]="0";

        if (($tag1==$tracktag1[$trackid]) || ($tag1==$tracktag2[$trackid]) || ($tag1==$tracktag3[$trackid]))    {
            $match[$trackid]=$match[$trackid]+1;
        }
        if (($tag2==$tracktag1[$trackid]) || ($tag2==$tracktag2[$trackid]) || ($tag2==$tracktag3[$trackid]))    {
            $match[$trackid]=$match[$trackid]+1;
        }
        if (($tag3==$tracktag1[$trackid]) || ($tag3==$tracktag2[$trackid]) || ($tag3==$tracktag3[$trackid]))    {
            $match[$trackid]=$match[$trackid]+1;
        }
并以 $tracks[]=$trackid。 然后我使用foreach($trackid作为trackid)来显示它们并添加播放按钮等

但是,我想按标记匹配对它们进行排序,因此首先显示匹配最多的曲目。我知道这可能很难理解,而且相当混乱,但如果有人这样做,请帮助:/
非常感谢

如果有两个数组,一个包含轨迹的总匹配项,另一个包含轨迹本身,则可以使用
array\u multisort()
根据其他数组对一个数组进行排序

大概是这样的:

$tagCount = array(
    1234 => 1,
    3456 => 3,
    5566 => 2
);

$tracks = array(
    1234 => array('name' => 'Track1', ...),
    3456 => array('name' => 'Track2', ...),
    5566 => array('name' => 'Track3', ...),
);

array_multisort($tagCount, SORT_DESC, $tracks);
因此,在
$tracks
数组中,您将按以下顺序获得曲目:

3456, 5566, 1234
请注意,当两个或多个磁道的标记计数值相同时,它们将根据第二个数组中的值进行排序,因此如果需要,最好提供“第二级”排序选项,例如
array\u multisort(