加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 17:00:02 所属栏目:PHP教程 来源:网络整理
导读:我有一个关联数组,其中包含日期键和团队值.例如: 2016年3月21日10:05 = ‘底特律与费城’ 2016年3月21日7:05 =’多伦多与渥太华’ 2016年3月21日7:05 = ‘Anahiem对阵波士顿’ 2016年3月21日10:25 = ‘芝加哥与温尼伯’ 问题是我正在解析的RSS源没有按顺序
我有一个关联数组,其中包含日期键和团队值.例如:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读