PHP - 按键值对多维数组进行分组

3

我目前有这段代码:

$files = glob('songs/*.{mp3}', GLOB_BRACE);
$dateUploaded = array();

foreach($files as $file){
    $path_parts = pathinfo($file);
    $dateUploaded[] = array("Date Uploaded" => date ("jS \of F,  Y", filemtime($file)), "File Name" => $path_parts['filename']);
}
print_r($dateUploaded);

输出哪些内容

Array (
    [0] => Array (
        [Date Uploaded] => 26th of February, 2013
        [File Name] => All That Glitters - This Sound (Felix Cartal Remix)
    )
    [1] => Array (
        [Date Uploaded] => 26th of February, 2013
        [File Name] => Bertie Blackman - Hide and Seek
    )
    [2] => Array (
        [Date Uploaded] => 18th of December, 2012
        [File Name] => Birds of Tokyo - This Fire
    )
    [3] => Array (
        [Date Uploaded] => 18th of December, 2012
        [File Name] => Bloc Party - Truth
    )
    [4] => Array (
        [Date Uploaded] => 18th of December, 2012
        [File Name] => C2C - Down the Road
    )
    [5] => Array (
        [Date Uploaded] => 18th of December, 2012
        [File Name] => Chance Waters - Young and Dumb feat Bertie Blackman
    )
    [6] => Array (
        [Date Uploaded] => 26th of February, 2013
        [File Name] => City Calm Down - Sense of Self
    )
    [7] => Array (
        [Date Uploaded] => 18th of December, 2012
        [File Name] => Clubfeet - Heartbreak
    )
    [8] => Array (
        [Date Uploaded] => 26th of February, 2013
        [File Name] => Cosmo Jarvis - My Own Thing
    )
    [9] => Array (
        [Date Uploaded] => 6th of June, 2013
        [File Name] => Courtney Barnett - History Eraser
    )
    [10] => Array (
        [Date Uploaded] => 6th of June, 2013
        [File Name] => Delphic - Baiya
    )
)

我将尝试按照“上传日期”键对它们进行分组。因此,我会得到类似于以下内容的东西:
Array (
    [26th of February, 2013] => Array (
        [0] All That Glitters - This Sound (Felix Cartal Remix)
        [1] Bertie Blackman - Hide and Seek
        [2] City Calm Down - Sense of Self
        [3] Cosmo Jarvis - My Own Thing
    )
    [18th of December, 2012] => Array (
        [0] Birds of Tokyo - This Fire
        [1] Bloc Party - Truth
        [2] C2C - Down the Road
        [3] Chance Waters - Young and Dumb feat Bertie Blackman
        [4] Clubfeet - Heartbreak
    )
    [6th of June, 2013] => Array (
        [0] Courtney Barnett - History Eraser
        [1] Delphic - Baiya
    )
)

请问有人能帮我解决如何做到这一点吗?

我想要实现的主要目标是,只需将文件放入服务器上的文件夹中,然后我的脚本就可以按上传日期分组打印出歌曲列表,以 <ul> 的形式呈现。

例如:

<ul>
    Last Updated: 26th of February, 2013
    <li>All That Glitters - This Sound (Felix Cartal Remix)</li>
    <li>Bertie Blackman - Hide and Seek</li>
    <li>City Calm Down - Sense of Self</li>
    <li>Cosmo Jarvis - My Own Thing</li>
</ul>
<ul>
    Last Updated: 18th of December, 2012
    <li>Birds of Tokyo - This Fire</li>
    <li>Bloc Party - Truth</li>
    <li>C2C - Down the Road</li>
    <li>Chance Waters - Young and Dumb feat Bertie Blackman</li>
    <li>Clubfeet - Heartbreak</li>
</ul>
<ul>
    Last Updated: 6th of June, 2013
    <li>Courtney Barnett - History Eraser</li>
    <li>Delphic - Baiya</li>
</ul>

感谢所有试图帮助我解决问题的人。

4个回答

7
foreach($files as $file){
    $path_parts = pathinfo($file);
    $date = date ("jS \of F,  Y", filemtime($file));
    if(isset($dateUploaded[$date])) {
          $dateUploaded[$date][] = $path_parts['filename'];
    } else {
          $dateUploaded[$date] = array($path_parts['filename']);
    }
}

0

分组

$groups = array();
foreach ($dateUploaded as $du) {
  $key = $du['Date Uploaded'];
  if (!isset($groups[$key])) $groups[$key] = array();
  $groups[$key][] = $du['File Name'];
}

以列表形式输出

$ret = '';
foreach ($groups as $key=>$list)
  $ret.="<ul>\n".$key."<li>".implode("</li>\n<li>",$list)."</li></ul>";

0

快速代码:

$arr = array();
foreach ($files as $file) {
  $date = $file['Date Uploaded'];
  $name = $file['File Name'];

  $arr[$date][] = $name;
}

0

这个也应该可以工作:

$newArray = array();
 foreach($dateUploaded as $row)
 {
    $newArray[$row['Date Uploaded']][] = $row['File Name']
 }

 print_r($newArray);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接