PHP命令数组根据另一个数组值

时间:2015-07-10 12:10:05

标签: php arrays

我有两个数组,一个有字符串元素,另一个完全具有这些元素的位置。在第二个数组键中,键表示一个位置,值表示第一个数组的值应该是的位置。但我无法管理让它发挥作用。这是我到目前为止的代码:

<?php
$array1= array("d","c","b","e","a");
$poss  = array (3  ,2  ,1  ,4  ,0);
var_dump(orderArray($poss, $array1));

function orderArray($poss, $data){
    $countPoss = count($poss);
    $countData = count($data);
    if ($countPoss === $countData){
        for ($i=0; $i<$countData; $i++){
            if($poss[$i]!==$i){
                $aux = $data[$i];
                $data = insertArrayIndex($data, $aux, $poss[$i]);
                unset($data[$i]);
                $data = array_values($data);
            }
        }
    }else{
        return FALSE;
    }
    return $data;
}
function insertArrayIndex($array, $new_element, $index) {
     $start = array_slice($array, 0, $index); 
     $end = array_slice($array, $index);
     $start[] = $new_element;
     return array_merge($start, $end);
 }

换句话说,$array1应根据$poss进行组织。例如:$array1'd'中的第一个元素应该在结尾的位置3中,而'a'应该在位置0中。 我一直在尝试数以百计的事情,但我无法理解。

4 个答案:

答案 0 :(得分:2)

您可以尝试使用array_combine

// since keys are aligned with words you can combine into single array
$merged_array = array_combine($poss, $array1);
// then sort array by keys and your words are in correct position
ksort($merged_array);

// update $array1 with sorted values 
$array1 = array_values($merged_array);

答案 1 :(得分:1)

如果您将此作为练习进行编程,那么我希望您耐心并祝您好运!

但是如果你需要在生产中使用这个代码,那么你最好使用PHP排序功能,而不是重新发明轮子。

解决方案#1

使用array_combine()创建一个新的数组,其中$poss为关键字,$array1为值,然后使用ksort()使用其键对此新数组进行排序:

$array1= array("d","c","b","e","a");
$poss  = array (3  ,2  ,1  ,4  ,0);

$out1 = array_combine($poss, $array1);
ksort($out1);
print_r($out1);

解决方案#2

使用功能array_multisort()同时对$poss $array1进行排序。 array_multisort()的第一个参数告诉顺序,其他数组的值跟随第一个数组中值的移动:

$array1= array("d","c","b","e","a");
$poss  = array (3  ,2  ,1  ,4  ,0);

array_multisort($poss, $array1);
print_r($array1);

两种方法的输出:

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
)

答案 2 :(得分:1)

您需要做的就是combine数组,然后sort结果,同时保持索引关联:)

// given
$array1= array("d","c","b","e","a");
$poss  = array (3  ,2  ,1  ,4  ,0);

// combine
$indexedArray = array_combine($poss,$array1);

// sort
asort($indexedArray);

// test
print_r($indexedArray);

导致:

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
)

答案 3 :(得分:0)

因此,您可以获得具有正确索引的数组

$newarray = array();
foreach($poss as $key => $value)
  $newarray[$value] = $array1[$key];
var_dump($newarray);

使用正确的索引和顺序

$newarray = array();
for($i = 0; $i < count($poss); $i++) {
  $newarray[] = $array1[array_search($i, $poss)];
}
var_dump($newarray);