微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对PHP数组进行排序,保持重复

我有一个关联数组,其中包含日期键和团队值.例如:

> 2016年3月21日10:05 => ‘底特律与费城’
> 2016年3月21日7:05 =>’多伦多与渥太华’
> 2016年3月21日7:05 => ‘Anahiem对阵波士顿’
> 2016年3月21日10:25 => ‘芝加哥与温尼伯’

问题是我正在解析的RSS源没有按顺序给我这些数据.所以我需要在日期之前订购这些游戏,当我在关联数组中添加这些字段时,重复日期(你可以看到两个游戏从3月21日7:05开始)被省略,因为两个键不能相同.我试图反转数据,所以键是值,值是键,我可以这样排序,但是当向后翻转数组时,(array_flip($input);)会出现同样的问题,因为两个键不能相同.

我确信有一种简单的方法可以解决这个问题,但我会绕圈子走.

任何帮助将非常感谢.

<?PHP
      foreach ($Feed->get_items() as $item): // this is my Feed parser 
            $string = $item->get_title();    // gets each element
            preg_match_all('/\((.*?)\)/',$string,$out); 
            $timedate = ($out[1][2]);
            $array[$timedate] = $string; // creates an array with date as key,string data as values
          endforeach;  
?>

解决方法

要做你想做的事,你必须把你拥有的数据放到一个稍微复杂的数组中,然后使用usort()函数根据你想要对它进行排序的键对它进行排序.这是一个例子:

<?PHP                                                                                                                                                                                                                                       

// Multidimensional array of 'games'                                                                                                                                                                
$games[] = array('date' => 'march 21,2016 10:05','title' => 'Detroit vs Philly');                                 

$games[] = array('date' => 'march 21,2016 7:05','title' => 'Toronto vs ottawa');                                 
$games[] = array('date' => 'march 21,'title' => 'Anaheim vs Boston');                                 
$games[] = array('date' => 'march 21,2016 10:25','title' => 'Chicago vs Winnipeg');                               

// Define a custom sort function to sort based on
//  the date index.  This will not sort properly
//  since I'm only using strcmp,but it works as 
//  an illustration.  For more details see: 
//  http://PHP.net/manual/en/function.usort.PHP
function cmp($a,$b)                                                            
{                                                                               
    return strcmp($a['date'],$b['date']);                                      
}                                                                            

// Sort the array
usort($games,"cmp");                                                           

print_r($games);

这将生成以下排序数组:

Array
(
[0] => Array
    (
        [date] => march 21,2016 10:05
        [title] => Detroit vs Philly
    )

[1] => Array
    (
        [date] => march 21,2016 10:25
        [title] => Chicago vs Winnipeg
    )

[2] => Array
    (
        [date] => march 21,2016 7:05
        [title] => Toronto vs ottawa
    )

[3] => Array
    (
        [date] => march 21,2016 7:05
        [title] => Anaheim vs Boston
    )

)

您会注意到日期没有完全正确排序,因为strcmp()只是进行基本的字符串比较.你可以为我们定义的cmp()函数添加更多功能,将字符串转换PHP日期,然后对它们进行实际的日期比较.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐