2015-06-09 83 views
-3
$options = array(
array("title" => "L", "value" => "L"), 
array("title" => "XL", "value" => "XL"), 
array("title" => "S", "value" => "S"), 
array("title" => "M", "value" => "M"),); 


$options2 = array(
array("title" => "S", "value" => "S"), 
array("title" => "M", "value" => "M"), 
array("title" => "L", "value" => "L"), 
array("title" => "XL", "value" => "XL"),); 

the final data should be look like: 
$options3 = array('S','M','L','XL'); 

我想重新排列$ options排序$ options2值;从其他阵列重新排列多维数组

的情况下是像php - sort an array by key to match another array's order by key

+0

你有没有尝试过的东西,这将是预期的输出? – Rizier123

+0

@ Rizier123结果应该与$ options2相同 – andesign

+0

如果你已经有'$ options2'为什么你不能使用这个数组? – Rizier123

回答

0

两个阵列具有任意顺序。你想重新安排第一个数组与第二个数组具有相同的顺序,对吗?

Alogrithm:遍历第二个数组(并跟踪当前位置),并且为每个项搜索第一个数组中的等价项(从当前位置向前),然后将其交换为当前位置位置。

伪代码:

for (curr_pos=0; curr_pos<options2.length; curr_pos++) 
    for (pos=curr_pos; pos<options.length; pos++) 
    if options2[curr_pos]==options[pos]: 
     swap options[curr_pos], options[pos] 
     break 

如果你可以使用额外的空间,那么它会使用散列地图更高效:

h=new HashMap() 
for (pos=0; pos<options.length; pos++) 
    h[options[pos].key]=options[pos].val 
for (pos=0; pos<options2.length; pos++) 
    options3[pos]= make_pair(options2[pos].key, h[options2[pos].key]) 
+0

ps this can也可以通过将第一个数组的项放入哈希表中并使用它来找到它们的位置来更快地完成,这将使算法O(N)时间和O(N)空间,而不是O(N^2)时间,O(1)空间如上所示 –

+0

是我想安排第一个数组与第二个数组的顺序相同 – andesign

0

这可以使用array_shift PHP函数来完成。

请使用自定义函数rearrange_array。

function rearrange_array($array, $key) { 
 
\t \t while ($key > 0) { 
 
\t \t \t $temp = array_shift($array); 
 
\t \t \t $array[] = $temp; 
 
\t \t \t $key--; 
 
\t \t } 
 
\t \t return $array; 
 
\t } 
 
\t 
 
\t 
 
\t $finalArray = rearrange_array($options,2);