2012-07-01 51 views
0

合并假设这已经是按升序排序的主数组:指数基于新阵列的创建,并与主阵列

$values = array('value1', 'value2', 'value3', 'value4', 'value5', 'value6'); 

而且每个部分的具体要求进行排序的键(索引)另一个数组。

$keys = array(0, 2, 1, 5); 

所需的逻辑:应该创建一个数组说$output

  • $values元素开始谁的索引存储$keys保存索引的顺序。
  • $values的其余元素应按升序排列在后面。

例如1

$values = array('value1', 'value2', 'value3', 'value4', 'value5', 'value6'); 
$keys = array(0, 2, 1, 5); 
$output = array('value1', 'value3', 'value2', 'value6', 'value4', 'value5'); 

例如, 2

$values = array('value1', 'value2', 'value3', 'value4', 'value5', 'value6'); 
$keys = array(5); 
$output = array('value6', 'value1', 'value2', 'value3', 'value4', 'value5'); 

例如, 3

$values = array('value1', 'value2', 'value3', 'value4', 'value5', 'value6'); 
$keys is empty, no keys(indexes). 
$output = array('value1', 'value2', 'value3', 'value4', 'value5', 'value6'); 

我已经$values$keys阵列。我只需要弄清楚如何创建$output数组。我很肯定,$values阵列上需要有一个foreach循环才能工作。

我遇到一堵墙这里试图弄清楚这件事了...

回答

1

尝试......

基本上解析$values阵列和拉动相关的值了。 取消设置数组,因为我们只留下未排序的值。 数组中的其余项目将在循环后合并。与array_merge。

取消设置数组不会改变索引值,这在这种情况下很有用。

虽然有更多的$keys$values会有错误。需要添加一些错误检查。

$values = array('value1', 'value2', 'value3', 'value4', 'value5', 'value6'); 
$keys = array(0, 2, 1, 5); 

foreach ($keys AS $key) { 
    $tempOutput[] = ($values[$key])?$values[$key]:''; 
    unset($values[$key]); 
} 

$output = array_merge($tempOutput, $values); 
+0

好吧,太棒了,那就是诀窍!非常感谢:) –

+0

不用担心,很高兴有帮助! – cstrat