基于索引的新阵列创建以及与主阵列的合并

时间:2012-07-01 04:23:50

标签: php arrays sorting

假设已按ASCENDING顺序排序的主数组:

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

另一个数组,按照某些特定要求对键(索引)进行排序。

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

必需逻辑:应创建一个数组$output

  • $values的元素开头,其中存储了索引$keys,保留了索引的顺序。
  • $values的其余元素应按升序附加在后面。

e.g。 1

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

e.g。 2

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

e.g。 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数组。我非常确定foreach数组上需要$values循环才能实现此功能。

我在这里试图弄清楚这件事......

1 个答案:

答案 0 :(得分: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);