2

例子:

$arr = array('willion','kevien','john','smith');

$orderedArr = array('anne','bold','hellen','john','kevien','polm','smith','willion');

我想$arr根据$orderdArr订单重新排序。我怎么做?

我期望的结果:

'约翰','凯文','史密斯','意志'

可能会按$orderedArr顺序更改,所以我希望 $arr 的顺序与 $orderedArr 相同。

我很抱歉简化了我的问题。我认为我的 $arr 更加复杂,$arr 的结构是:我使用 print_r() 来显示数组。

array( [0] => array([id]=>1 [name]=>willion)
        [1] => array([id]=>2 [name]=>kevien)
        [2] => array([id]=>3 [name]=>join)
      )

非常感谢!

4

5 回答 5

3

您可以使用usort

$order = array_flip($orderedArr);
usort($arr, function ($a, $b) use($order) {
    return $order[$a] - $order[$b];
});
print_r($arr);

输出

Array
(
    [0] => john
    [1] => kevien
    [2] => smith
    [3] => willion
)

观看现场演示

于 2013-06-06T09:01:20.037 回答
1

在有序数组上使用foreach(),将值附加到新数组,但前提是原始数组中存在:

$arr = array('willion','kevien','john','smith');
$orderedArr = array('anne','bold','hellen','john','kevien','polm','smith','willion');

foreach($orderedArr as $key => $value){
    if(in_array($value, $arr)){
        $newArr[] = $value;
    }
}

输出:

数组([0] => john [1] => kevien [2] => smith [3] => willion)

于 2013-06-06T09:00:40.863 回答
1

如果您不想要 $arr 数组的 id->name 关联,您可以简单地执行此操作。

$to_be_sorted=array();
foreach($arr as $key=>$person)
{
    $to_be_sorted[]=$person['name'];
}

$sorted = array_intersect($orderedArr, $to_be_sorted);

echo implode(",",$sorted);
于 2013-06-06T09:01:10.057 回答
1

假设$arr始终是 的子集$orderedArr,您可以使用array_intersect

$arr = array_intersect($orderedArr, $arr);
// $arr is now ['john', 'kevien', 'smith', 'willion']
于 2013-06-06T08:57:43.313 回答
0

我认为你可以在你的订单数组中循环并与你的数组进行比较,以in_array按照所需的顺序构建一个新数组

$arr = array('willion','kevien','john','smith');

$orderedArr = array('anne','bold','hellen','john','kevien','polm','smith','willion');

$orderedUsers = array();
foreach ($orderedArr as $data) {
    if(in_array($data,$arr))
    {
        $orderedUsers[] = $data;
    }
}

这将输出

array (size=4)
  0 => string 'john' (length=4)
  1 => string 'kevien' (length=6)
  2 => string 'smith' (length=5)
  3 => string 'willion' (length=7)

现场演示

于 2013-06-06T09:01:37.483 回答