根据第一个数组排序数组

时间:2013-07-27 08:13:45

标签: php sorting

我有这个数组$arr1

Array
(
    [0] =>  [col1]
    [1] =>  [col2]
    [2] =>  [col3]
)

我有另一个数组$arr2

Array
(
    [0] => Array
        (
            [col3] => data1
            [col2] => data2
            [col1] => data3
        )

    [1] => Array
        (
            [col2] => data1
            [col3] => data2
            [col1] => data3
        )
)

我需要将此$arr2个密钥排序为col1, col2col3,就像$arr1一样。

我尝试了array_multisort($arr1,$arr2),反之亦然。没有任何效果。对此有何帮助?

4 个答案:

答案 0 :(得分:2)

使用循环。

$keys = array_values($arr1);
$out = array();
foreach($arr2 as $ar){
    $outar = array();
    foreach($keys as $k){
        if(isset($ar[$k])){
            $outar[$k]=$ar[$k];
        }
    }
    $out[]=$outar;
}

输出数组将保存在$out中。请参阅ideone

答案 1 :(得分:0)

foreach ( $arr2 as $k => &$arr ) {
    ksort($arr);
}
print_r($arr2);

ksort与foreach循环一起使用,其值通过引用传递。

答案 2 :(得分:0)

你可以用uksort和一个闭包(PHP 5.3 +)

来做到这一点
foreach($arr2 as &$array){
    uksort($array,function($a,$b) use ($arr1){
        return array_search($a, $arr1) - array_search($b, $arr1);
    });
}

答案 3 :(得分:0)

如果第一个数组值完全与第二个数组中的索引相同,请尝试

$resarr = array();
foreach ($arr2 as $somearr) {
    $i = 0;
    $newarr = array();
    foreach ($somearr as $value) {
        $newarr[$arr1[$i]] = $value;
        $i++;
    }
    $resarr[] = $newarr;
}
$arr1 = $resarr;