示例:
$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)
)
非常感谢!
答案 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
)
答案 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)