php - usesort 在由explode函数抓取的区分大小写的字符串中不起作用
问题描述
此代码运行良好,直到某些内容区分大小写。我尝试使用 strnatcasecmp 而不是 cmp,它会抓取整个字符串而不是姓氏。关于如何更好地写这个的任何建议?
例如,当前订单是:
Aaron Carson
Adam Davidson
Jen Hennings
ektor bluemouth
我希望 ektor bluemouth 位居榜首。
foreach($connected->posts as $p) {
$lastname = explode(' ', $p->post_title);
if(sizeof($lastname) == 1) {$p->lastname = $lastname[0];}
if(sizeof($lastname) == 2) {$p->lastname = $lastname[1];}
if(sizeof($lastname) == 3) {$p->lastname = $lastname[2];}
}
usort($connected->posts, 'cmp');
解决方案
我会做这样的事情
$aPosts = array(
array('post_title' => 'Aaron Carson'),
array('post_title' => 'Adam Davidson'),
array('post_title' => 'Jen Hennings'),
array('post_title' => 'ektor bluemouth'),
);
$aOrderedPosts = array();
foreach($aPosts as $iPos => $p){
$a = explode(' ', $p['post_title']);
// cast the last name to lowercase and assign by reference the post
$aOrderedPosts[strtolower($a[1])] =& $aPosts[$iPos];
}
var_dump($aOrderedPosts);
// perform a key sort
ksort($aOrderedPosts);
var_dump($aOrderedPosts);
它可以适应您的数据格式
$aOrderedPosts = array();
foreach($connected->posts as $iPos => $p){
$a = explode(' ', $p->post_title);
$aOrderedPosts[strtolower($a[1])] =& $connected->posts[$iPos];
}
ksort($aOrderedPosts);
var_dump($aOrderedPosts);
最好$aOrderedPosts
在您从数据库创建/读取帖子对象时创建。此外,我会将它创建为connection
类的属性。
推荐阅读
- node.js - 从 Firestore 获取异步值
- python - 让 Pandas 找出在 pd.read_excel 中要跳过的行数
- ruby-on-rails - 如何使用 Rspec 知道控制器方法的流程
- c# - 在我对 C# 中的 char 数组的地址进行异或后,无法获得与 Delphi 代码相同的结果
- html - 无法在白色方块所在的位置插入 fontawesome 图标
- python - 熊猫有条件申请
- postgresql - 如何在 ireport 中按条件运行 sql?
- c# - 如何避免使用实体框架在关系引用循环中检索关系对象?
- python - 如何从列中获取特定值并在 Python / Panda 中添加为新列?
- spring-integration - 将 jms 属性映射到 RabbitMQ