为此找到合适的标题几乎是不可能的。
想象一下这种情况:
我们有一个包含某些产品标签的数组。关键是每个标记的唯一 id ,其值为其标签:
可用标记
Array (
[3] => Sweet
[4] => Sour
[5] => Bitter
[6] => Winter
[7] => Organic
)
我们有另一个数组,其中包含已选择的标记。选择具有由键定义的特定顺序,而值表示 id (我们在数组#1中看到的实际标记)。
特定订单中的选定标签
Array (
[10] => 4
[20] => 3
[30] => 7
)
我的理论方法
当然,我可以通过第二个数组进行预处理,在新数组中收集适当的值(对应于第一个数组的条目)。然后我可以迭代第一个数组并添加新数组中尚未出现的所有值(到新数组)。
老实说 - 这感觉不太专业。不幸的是,我不知道如何做得更好。
问题
如何使用第二个数组定义的年表(选定的标签)整齐排序第一个数组(可用标记)?
注意
我想结束第一个数组中的所有项目。不仅仅是第二个中列出的那些。
如果有人好奇:这是多选的,可以排序。已选择的项目是可排序的,因此必须以正确的顺序出现。其他项目顺序无关紧要。我的服务器端数据处理程序类给出了我所描述的这两个数组,这就是我必须使用的。
答案 0 :(得分:1)
以下是使用uksort()
的解决方案。 $tags
数组中不存在的$order
数组的元素将排序到末尾,并且它们之间的相对顺序是未定义的。
function my_sort($a, $b) {
global $order;
if(in_array($a, $order)) {
if(in_array($b, $order)) {
// Both $a and $b have an order
return array_search($a, $order) - array_search($b, $order);
}
else {
// Only $a has an order, so it goes before $b
return -1;
}
}
else if(in_array($b, $order)) {
// Only $b has an order, so it goes before $a
return 1;
}
else {
// Neither $a or $b has an order, so we don't care how they're sorted
return 0;
}
}
uksort($tags, 'my_sort');
答案 1 :(得分:0)
我认为您可以在第二个数组中循环并使用键
构建一个新数组$new = array();
foreach($array2 as $key => $val)
{
$new_array[] = $array1[$val];
}
现在所选商品已在$new_array