我有点陷入一些数组排序,也许有人可以帮我解决?
鉴于这两个阵列:
$sortOrder = array(12, 20, 4);
$data = array(
(object)array(
'id' => 4,
'name' => 'Tom'
),
(object)array(
'id' => 12,
'name' => 'Bob'
),
(object)array(
'id' => 20,
'name' => 'Max'
)
)
我想按$data
中指定的ID顺序对$sortOrder
进行排序。
所以在排序后我想要$ data这样:
$data = array(
(object)array(
'id' => 12,
'name' => 'Bob'
),
(object)array(
'id' => 20,
'name' => 'Max'
),
(object)array(
'id' => 4,
'name' => 'Tom'
),
)
我该怎么做?
答案 0 :(得分:2)
请试试这个。它将打印为您的预期输出。
$sortOrder = array(12, 20, 4);
$data = array(
array(
'id' => 4,
'name' => 'Tom'
),
array(
'id' => 12,
'name' => 'Bob'
),
array(
'id' => 20,
'name' => 'Max'
)
);
$sortedArray = array();
foreach($sortOrder as $id)
{
foreach($data as $_data)
{
if($_data["id"] == $id)
{
$sortedArray[] = $_data;
break;
}
}
}
print_r($sortedArray);
答案 1 :(得分:1)
usort
会帮助你。
usort($data, function ($a, $b) use ($sortOrder) {
$pos1 = array_search($a->id, $sortOrder);
$pos2 = array_search($b->id, $sortOrder);
return ($pos1 === $pos2) ? 0 : ($pos1 < $pos2 ? -1 : 1);
});
答案 2 :(得分:0)
您尝试使用sort和foreach来制作它吗? http://php.net/manual/en/function.sort.php