【问题标题】:Rearrange multidimensional array from other array从其他数组重新排列多维数组
【发布时间】:2015-08-24 01:47:19
【问题描述】:
$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

【问题讨论】:

  • 你有没有尝试过,预期的输出是什么?
  • @Rizier123 结果应该和 $options2 一样
  • 如果你已经有了$options2,为什么不能直接使用这个数组呢?
  • @Rizier123 $options 是由系统生成的,我无法编辑系统的输出。但是我有 $options2 的标准数据,所以我需要重新排列 $options 看起来像 $options2;
  • 是从数据库生成的吗?

标签: php sorting multidimensional-array associative-array


【解决方案1】:

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

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

伪代码:

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

【讨论】:

  • 附注这也可以通过将第一个数组的项目放入哈希表并使用它来找到它们的位置来更快地完成。这将使算法 O(N) 时间和 O(N) 空间,而不是 O(N^2) 时间,O(1) 空间,如上所示。
  • 是的,我想将第一个数组的排列顺序与第二个数组相同
【解决方案2】:

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

请使用自定义函数重新排列数组。

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

【讨论】:

    猜你喜欢
    • 2019-02-21
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多