PHP:如何对关联用户ID的用户数组进行正确排序?
解决数组排序后ID与用户名不匹配的问题
嘿,我完全懂你的困扰——单独对$user_names排序后,原本一一对应的用户ID和名字就“分家”了,自然没法正确输出配对的信息。这里有两种实用的解决办法,帮你搞定这个问题:
方法一:合并成多维数组(推荐)
把用户名和对应的ID绑定到同一个数组元素里,这样排序的时候整个用户的信息会一起移动,就不会错位了。代码示例:
// 你的原始数组 $user_names = array('John', 'Peter', 'Anna'); $user_ids = array(67, 68, 73); // 合并成包含用户信息的多维数组 $users = []; foreach ($user_names as $idx => $name) { $users[] = [ 'name' => $name, 'id' => $user_ids[$idx] ]; } // 按照用户名排序(大小写不敏感的话可以用strcasecmp) usort($users, function($a, $b) { return strcmp($a['name'], $b['name']); }); // 输出配对结果 foreach ($users as $user) { echo "User: {$user['name']} with id: {$user['id']}\n"; }
这种方式的好处是,后续如果要添加更多用户属性(比如邮箱、年龄),直接扩展多维数组就行,代码的可维护性更高。
方法二:用array_multisort同步排序
PHP内置的array_multisort函数可以实现“根据一个数组的排序结果,同步调整其他数组的元素位置”,完美适配你的场景:
// 你的原始数组 $user_names = array('John', 'Peter', 'Anna'); $user_ids = array(67, 68, 73); // 同步排序:先排名字数组,ID数组跟着调整位置 array_multisort($user_names, SORT_ASC, $user_ids); // 现在输出就完全对应了 foreach ($user_names as $idx => $name) { echo "User: {$name} with id: {$user_ids[$idx]}\n"; }
这个方法更简洁,适合只需要处理两个关联数组的简单场景。
不管选哪种方法,都能让你轻松输出正确的“用户名+ID”配对信息啦!
内容的提问来源于stack exchange,提问作者Martin Zeltin
相关产品推荐
相关产品推荐

