PHP数组排序问题

luits 2008-09-20 10:04:53
PHP数组排序问题
$array=array('orange'=>84, 'blue'=>30, 'banana'=>99);
请问题如何给这个数组分别对数组名和数组值进行排序?请写出你自己的算法而不是使用PHP函数自带的排序函数。

不用自带函数估计大家觉得有点没事找茬,但别人的要求就是这样!
...全文
196 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
luits 2008-09-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yunfeifan 的回复:]
if($keys[$j] > $keys[$j + 1]){
$tmp = $keys[$j];
$keys[$j] = $keys[$j + 1];
$keys[$j + 1] = $tmp;
}
}
[/Quote]
这样也可以比较字符的大小!好办法!

[Quote=引用 4 楼 yunfeifan 的回复:]
foreach($keys as $k => $v){
$result[$v] = $array[$v];
}
[/Quote]
嗯这个办法帮我很大的忙,代码也是满精减的了,谢谢yunfeifan兄
yunfeifan 2008-09-20
  • 打赏
  • 举报
回复
字符串也可以比较,开始把键名放到另外一个数组中做value,然后进行比较,也是一样的

<?php
$array = array("yellow"=>1, "green"=>2, "blue"=>3, "white"=>4, "grey"=>5);

$keys = array();
foreach($array as $key => $value){
$keys[] = $key;
}

for($i = count($array) - 1; $i > 0; $i--){
for($j = 0 ;$j < $i; $j ++){
if($keys[$j] > $keys[$j + 1]){
$tmp = $keys[$j];
$keys[$j] = $keys[$j + 1];
$keys[$j + 1] = $tmp;
}
}
}

foreach($keys as $k => $v){
$result[$v] = $array[$v];
}
print_r($result);
?>

这个应该不是最优化的,大家还有什么好的办法
macleane 2008-09-20
  • 打赏
  • 举报
回复
先判断是不是数字,如果不是就用strcmp比较
luits 2008-09-20
  • 打赏
  • 举报
回复

冒泡排序法 这个想法是不错。你这个办法可以处理到数组的值如84 30 99,但是这里还有个键值要处理。如array('orange'=>90),这里键值并非数值,不能是简单的数字循环来排序。如何处理这个东西??
fxs_2008 2008-09-20
  • 打赏
  • 举报
回复
网上查查冒泡排序法写一个吧
对数据值排序好排
但那键名排序涉字母排序,麻烦一点
yunfeifan 2008-09-20
  • 打赏
  • 举报
回复
array_keys 可以返回数组的键名

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧