我有两个数组,一个是线性数组,表示将按照排序的排序列表,另一个是将要排序的关联数组。
此处,$recommended_props
是排序列表,$prop_array
是我想要排序的关联,具体取决于排序列表。排序列表指示属性代码,我想根据此代码索引对数组进行排序。
我的阵列
//Sorted list of property codes
$recommended_props = [29822, 24785, 45875, 45872];
//Property details and this array will be sorted
$prop_array = [
[
'code' => 24785,
'price' => 120,
'currency' => 'USD',
],
[
'code' => 29822,
'price' => 150,
'currency' => 'USD',
],
[
'code' => 45872,
'price' => 300,
'currency' => 'USD',
],
[
'code' => 45875,
'price' => 250,
'currency' => 'USD',
],
];
我想要的输出是:
Array
(
[0] => Array
(
[code] => 29822
[price] => 150
[currency] => USD
)
[1] => Array
(
[code] => 24785
[price] => 120
[currency] => USD
)
[2] => Array
(
[code] => 45875
[price] => 250
[currency] => USD
)
[3] => Array
(
[code] => 45872
[price] => 300
[currency] => USD
)
)
我使用循环完成了这项任务,但我的好奇心是知道有没有简单的方法来完成这项工作?
我使用的代码:
$sorted_prop = [];
foreach($recommended_props as $code){
foreach($prop_array as $key=>$property){
if($property['code'] == $code){
$sorted_prop[] = $property;
unset($prop_array[$key]);
break;
}
}
}
任何建议将不胜感激。谢谢大家。
答案 0 :(得分:1)
usort()是要使用的功能:
$recommended_props = [29822, 24785, 45875, 45872];
$prop_array = [
[
'code' => 24785,
'price' => 120,
'currency' => 'USD',
],
[
'code' => 29822,
'price' => 150,
'currency' => 'USD',
],
[
'code' => 45872,
'price' => 300,
'currency' => 'USD',
],
[
'code' => 45875,
'price' => 250,
'currency' => 'USD',
],
];
usort(
$prop_array,
function($a, $b) use ($recommended_props) {
return (array_search($a['code'], $recommended_props) < array_search($b['code'], $recommended_props)) ? -1 : 1;
}
);
var_dump($prop_array);
您可以更有效地翻转$recommended_props
,并通过回调中的密钥使用它进行访问
答案 1 :(得分:0)
usort
就是您所需要的!
$recommended_props = [29822, 24785, 45875, 45872];
usort($prop_array, function($a, $b) use $recommended_props {
return strpos($recommended_props, $a['code']) > strpos($recommended_props, $b['code']);
});
代码尚未经过测试,但它应该让您对如何继续进行操作。 (请注意,您可能还需要处理代码不在$ recommended_props数组中的情况