php 多维数组排序问题 把数组test_data按id_arr顺序重新排序.

$test_data=array(array("id"=>1,"data"=>"a"),array("id"=>3,"data"=>"c"),array("id"=>2,... $test_data = array(
array("id"=>1,"data"=>"a"),
array("id"=>3,"data"=>"c"),
array("id"=>2,"data"=>"b"),
array("id"=>4,"data"=>"d"),
array("id"=>6,"data"=>"f"),
array("id"=>5,"data"=>"e")
);

$id_arr = array (2,1,3,4,5,6);
抱歉,可能我没说清楚.

我是需要把$test_data这个多维数组按ID排序, ID的顺序是$id_arr中指定的.
查了资料,好像是需要用 array_multisort 这个函数.不过没看明白怎么用.
希望大侠指点.
展开
 我来答
风口的大熊猫
2011-07-05 · TA获得超过451个赞
知道小有建树答主
回答量:972
采纳率:100%
帮助的人:361万
展开全部
<?php
$array = array(
array("id"=>1,"data"=>"a"),
array("id"=>3,"data"=>"c"),
array("id"=>2,"data"=>"b"),
array("id"=>4,"data"=>"d"),
array("id"=>6,"data"=>"f"),
array("id"=>5,"data"=>"e")
);
foreach ($array as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $array);
print_r($array);
?>

输出

Array (
[0] => Array ( [id] => 1 [data] => a )
[1] => Array ( [id] => 2 [data] => b )
[2] => Array ( [id] => 3 [data] => c )
[3] => Array ( [id] => 4 [data] => d )
[4] => Array ( [id] => 5 [data] => e )
[5] => Array ( [id] => 6 [data] => f )
)

因为你的KEY是id data 而且都是一样的,所以没有办法用 array_multisort 直接排序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9308069
2011-07-05 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:2051万
展开全部
感觉应该不能用multisort,multisort只是值-值关联,
你这个要"子数组的值"和另一数组的值关联

我用usort可排:
<?php
$t = array(
array("id"=>1,"data"=>"a"),
array("id"=>3,"data"=>"c"),
array("id"=>2,"data"=>"b"),
array("id"=>4,"data"=>"d"),
array("id"=>6,"data"=>"f"),
array("id"=>5,"data"=>"e")
);
$idx = array (2,1,4,3,6,5); //以id和该数组关联排序

$order=array_flip($idx);
function sortByIdx($a, $b){
global $order;
return $order[$a['id']]-$order[$b['id']];
}
usort($t,'sortByIdx');
var_dump($t);
====================
输出
array
0 =>
array
'id' => int 2
'data' => string 'b' (length=1)
1 =>
array
'id' => int 1
'data' => string 'a' (length=1)
2 =>
array
'id' => int 4
'data' => string 'd' (length=1)
3 =>
array
'id' => int 3
'data' => string 'c' (length=1)
4 =>
array
'id' => int 6
'data' => string 'f' (length=1)
5 =>
array
'id' => int 5
'data' => string 'e' (length=1)
==============
(代码只在当前题目条件下有效并符合题意)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
马后雷鼓下扬州5058
2011-07-05 · TA获得超过4321个赞
知道小有建树答主
回答量:693
采纳率:33%
帮助的人:837万
展开全部
// $test_data: 1,3,2,4,6,5

$new_data = array();

for($i = 0; $i < count($id_arr); $i++) {
for($a = 0; $a < count($test_data); $a++) {
if($test_data[$a]["id"] == $id_arr[$i]) {
array_push($new_data, $test_data[$a]);
}
}
}

// $new_data: 2,1,3,4,5,6
追问
这种方法我也想过,不过感觉有点麻烦,能用现有函数直接排序吗?  比如 array_multisort
追答
不管是 sort 还是 array_multisort 都是按照 array 的 index 的数值或者英文字母来排序,也就是 0,1,2,3,4... 或者 4,3,2,1,0,a,b,c,d,e 或者 e,d,c,b,a。你给出的条件 2,1,3,4,5,6 可以说是个无序排列。本人暂时还没想到更好的方法。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
songgen76
2011-07-05 · TA获得超过490个赞
知道小有建树答主
回答量:820
采纳率:100%
帮助的人:527万
展开全部
foreach($arr as $value){ echo
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式