从其他数组重新排列多维数组

时间:2015-06-09 09:52:14

标签: php sorting multidimensional-array associative-array

$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');

我想按$ options2值重新安排$ options排序;

案例看起来像php - sort an array by key to match another array's order by key

2 个答案:

答案 0 :(得分:0)

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

算法:迭代第二个数组(并跟踪当前位置),对于每个项目,搜索第一个数组中的等效项(从当前位置向前),然后将其交换到当前位置

伪代码:

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])

答案 1 :(得分:0)

这可以使用array_shift php函数完成。

请使用自定义函数rearrange_array。

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