2017-02-10 137 views
0

我有这种阵列的选择,以及内部阵列的一些值的阵列(寻找一个特定的值)为“ID”排序基于另一阵列

[options] => Array (
    [0] => Array (
     [id] => 1088 
     [label] => John 
    ) 
    [1] => Array (
     [id] => 1089 
     [label] => Peter 
    ) 
    [2] => Array (
     [id] => 1050 
     [label] => Mary 
    ) 
    .... 

在另一方面,我有这样的数组:

$array_sort = array(1089, 1050, 1088, ...); 

我想第一个数组的数组的选项进行排序(看的“ID”)的基础上$array_sort。我知道如何以非常肮脏的方式(有很多循环和临时数组),但我想有一些聪明的array_ *函数解决方案来做到这一点。

谢谢!

+0

谢谢你的版,@Qirel – FlamingMoe

回答

1

你可以排序数组中使用array_filter限制的选项,只有那些,然后usort使用array_search基于他们对$array_sort数组中的位置对它们进行排序:

$sorted = array_filter($options, function($arr) use($array_sort) { 
    return in_array($arr['id'], $array_sort); 
}); 
usort($sorted, function($a, $b) use($array_sort) { 
    return array_search($a['id'], $array_sort) - array_search($b['id'], $array_sort); 
}); 
// $sorted should now be the sorted array 
+0

$排序后的回报只是1 :-( – FlamingMoe

+0

对不起,它对数组进行排序,我将编辑代码 –

+0

我无法编辑,但是您错过了“use($ array_sort)”这两个函数为了获得array_sort的正确范围,因为它在函数之外;-)和它工作!谢谢 – FlamingMoe