如何在另一个阵列上重新排序数组?

时间:2013-06-06 08:54:14

标签: php arrays

示例:

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

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

我想根据$arr订单求助$orderdArr订单。我该怎么做?

我期待的结果:

  

'约翰', 'kevien', '史密斯', 'willion'

$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)
      )

非常感谢!

5 个答案:

答案 0 :(得分: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
)

See Live DEMO

答案 1 :(得分:1)

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

$arr = array_intersect($orderedArr, $arr);
// $arr is now ['john', 'kevien', 'smith', 'willion']

答案 2 :(得分: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)

答案 3 :(得分:1)

如果你不想要$ arr数组的id->名称关联,你可以简单地这样做。

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

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

echo implode(",",$sorted);

答案 4 :(得分: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)

Live Demo