对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 => ‘底特律与费城’ 问题是我正在解析的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日期,然后对它们进行实际的日期比较. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |