如何根据值对PHP中的多维数组进行排序

时间:2020-05-26 09:59:23

标签: php arrays sorting

对于平面文件博客系统,数据存储在.txt文件中。 .txt文件如下所示(彼此之间三行):

id_1234 // identity
cars    // title
5       // number of likes

使用foreach循环,我要输出 id 标题顶赞 因此,foreach的输出应如下所示:

id_1234 cars 5

这是我到目前为止所做的:

$likes_array = array();
$files = glob("data/articles/*.txt"); // read all files in dir articles
foreach($files as $file) { // Loop through the files
    $lines = file($file, FILE_IGNORE_NEW_LINES);
    $id_line = $lines[0]; // id line
    $title_line = $lines[1]; // title line
    $like_line = $lines[2]; // likes line
    $likes_array[$id_line][$title_line] = $like_line;
}

print_r($likes_array);给我这样的输出:

Array 
    (   
    [id_123] => Array 
                    (                              
                      [cars] => 4                              
                    ) 
    [id_456] => Array 
                    ( 
                      [sports] => 5 
                    ) 
    [id_789] => Array 
                    ( 
                      [animals] => 8 
                    )                               
    )

要输出数据,我使用以下foreach循环:

foreach($likes_array as $key => $val) {
   echo $key.' '.key($val).' '.current($val).'<br />';
}

到目前为止一切都很好;它给了我我想要实现的输出。 但是我想基于喜欢按降序排序数组(最喜欢在顶部)。我没有成功 我尝试了arsort(),但没有结果,我也尝试了usort,如下所示:

usort($likes_array, function ($a, $b) {
    return reset($b) - reset($a);
});

最后一个以降序对输出进行排序,但是我松了 id's

Array
    ( 
    [0] => Array 
                ( 
                  [animals] => 8 
                ) 
    [1] => Array 
                ( 
                  [sports] => 5 
                ) 
    [2] => Array
                ( 
                  [cars] => 4 
                )
    )

所以:如何根据喜欢按降序对输出进行排序?也许这不是创建我上面做的数组的正确方法?

0 个答案:

没有答案