请教高手:求多维数组排序

njxiaod 2010-11-11 08:03:46


Array
(
[0] => stdClass Object
(
[total] => 1
[name] => Baby

)

[parent_161] => stdClass Object
(

[name] => Cab
[total] => 3

)

[1] => stdClass Object
(
[total] => 3
[name] => Tree

)
)
//如果按照name asc 排序?并保持结构不变?
...全文
133 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
LKK 2010-11-20
  • 打赏
  • 举报
回复
学习了。。
在-云端 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 amani11 的回复:]

虽然方法差不多

但是LZ的是对象数组,并非标题所说的多维数组
[/Quote]

强制类型转换就ok了!
xuzuning 2010-11-16
  • 打赏
  • 举报
回复
$ar = array(
(object)array( 'total' => 1, 'name' => 'Baby'),
'parent_161' => (object)array( 'name' => 'Cab', 'total' =>3),
(object)array( 'total' => 3, 'name' => 'Tree'),
);

foreach($ar as $v)
$p[] = $v->name;

array_multisort($p, SORT_ASC, $ar);

print_r($ar);
Array
(
[0] => stdClass Object
(
[total] => 1
[name] => Baby
)

[parent_161] => stdClass Object
(
[name] => Cab
[total] => 3
)

[1] => stdClass Object
(
[total] => 3
[name] => Tree
)

)

moliyishengyuan 2010-11-16
  • 打赏
  • 举报
回复

<?php
class Test
{
public $id;
public $name;

public function __construct($id, $name)
{
$this->id = $id;
$this->name = $name;
}
}

$test1 = new Test(1, 'q1');
$test2 = new Test(2, 'w2');
$test3 = new Test(3, 'a3');

$data[] = $test1;
$data[] = $test2;
$data[] = $test3;

var_dump($data);

usort($data, 'sortObj');

var_dump($data);

function sortObj($a, $b)
{
$a_name = $a->name;
$b_name = $b->name;
if ($a_name == $b_name)
{
return 0;
}

return ($a_name < $b_name) ? -1 : 1;
}
?>

output:
排序前
array
0 =>
object(Test)[1]
public 'id' => int 1
public 'name' => string 'q1' (length=2)
1 =>
object(Test)[2]
public 'id' => int 2
public 'name' => string 'w2' (length=2)
2 =>
object(Test)[3]
public 'id' => int 3
public 'name' => string 'a3' (length=2)
排序后
array
0 =>
object(Test)[3]
public 'id' => int 3
public 'name' => string 'a3' (length=2)
1 =>
object(Test)[1]
public 'id' => int 1
public 'name' => string 'q1' (length=2)
2 =>
object(Test)[2]
public 'id' => int 2
public 'name' => string 'w2' (length=2)

amani11 2010-11-14
  • 打赏
  • 举报
回复
虽然方法差不多

但是LZ的是对象数组,并非标题所说的多维数组
igaojie 2010-11-14
  • 打赏
  • 举报
回复


function natsort2d( &$arrIn, $index = null )
{

$arrTemp = array();
$arrOut = array();

foreach ( $arrIn as $key=>$value ) {

reset($value);
$arrTemp[$key] = is_null($index)
? current($value)
: $value[$index];
}

natsort($arrTemp);

foreach ( $arrTemp as $key=>$value ) {
$arrOut[$key] = $arrIn[$key];
}

$arrIn = $arrOut;

}





上面是我在手册里看到的函数 你可以试试··二维的自然排序法
igaojie 2010-11-14
  • 打赏
  • 举报
回复

$arr = array(
'0'=>array('total'=>1,'name'=>'Baby'),
'parent_16'=>array('total'=>3,'name'=>'Cab'),
'1'=>array('total'=>3,'name'=>'Tree'),
);

uasort($arr,"mysort");
print_r($arr);

function mysort($arr1=array(),$arr2=array()){

if($arr1['name'] == $arr2['name']){
return 0;
}
return ($arr1['name'] > $arr2['name'])?'1':'-1';
}


有时间多看看手册比较好~~呵呵·~~
njxiaod 2010-11-14
  • 打赏
  • 举报
回复
没人知道?
潇湘博客 2010-11-12
  • 打赏
  • 举报
回复
你要怎么样排序啥··
jlzan1314 2010-11-11
  • 打赏
  • 举报
回复
uasort() 去看看用法就知道了.

21,886

社区成员

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

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