对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日期,然后对它们进行实际的日期比较.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...