Php 多维数组列的更改顺序

Php 多维数组列的更改顺序,php,multidimensional-array,multiple-columns,Php,Multidimensional Array,Multiple Columns,我在php中有一个多维数组,需要将列顺序更改为第二个简单数组的顺序 编辑: 虽然这两个数组在值和键方面是相同的,但我使用它与phpexcel一起导出,它会按照给定数组的顺序生成xls文件。我需要更改顺序,使xls文件看起来像那样 该数组如下所示: Array ( [0] => Array ( [name] => Name1 [sn] => Sn1 [somenumber] =>

我在php中有一个多维数组,需要将列顺序更改为第二个简单数组的顺序

编辑: 虽然这两个数组在值和键方面是相同的,但我使用它与phpexcel一起导出,它会按照给定数组的顺序生成xls文件。我需要更改顺序,使xls文件看起来像那样

该数组如下所示:

Array
(
    [0] => Array
        (
            [name] => Name1
            [sn] => Sn1
            [somenumber] => 43234234
        )

    [1] => Array
        (
            [name] => Name2
            [sn] => Sn2
            [somenumber] => 4564564
        )

    [2] => Array
        (
            [name] => Name3
            [sn] => Sn3
            [somenumber] => 6575647456745
        )
)
Array
(
    [0] => Array
        (
            [sn] => Name1
            [name] => Sn1
            [somenumber] => 43234234
        )

    [1] => Array
        (
            [sn] => Name2
            [name] => Sn2
            [somenumber] => 4564564
        )

    [2] => Array
        (
            [sn] => Name3
            [name] => Sn3
            [somenumber] => 6575647456745
        )
)
第二个数组是:

Array
        (
            [0] => sn
            [1] => name
            [2] => somenumber
        )

我需要的是基于第二个数组排序的第一个数组,因此它看起来如下所示:

Array
(
    [0] => Array
        (
            [name] => Name1
            [sn] => Sn1
            [somenumber] => 43234234
        )

    [1] => Array
        (
            [name] => Name2
            [sn] => Sn2
            [somenumber] => 4564564
        )

    [2] => Array
        (
            [name] => Name3
            [sn] => Sn3
            [somenumber] => 6575647456745
        )
)
Array
(
    [0] => Array
        (
            [sn] => Name1
            [name] => Sn1
            [somenumber] => 43234234
        )

    [1] => Array
        (
            [sn] => Name2
            [name] => Sn2
            [somenumber] => 4564564
        )

    [2] => Array
        (
            [sn] => Name3
            [name] => Sn3
            [somenumber] => 6575647456745
        )
)

如果所有钥匙始终存在

// Make template array with correct order of keys
$template = array_flip($second);

foreach($array as &$x) {
   // replace values in template
   $x = array_replace($template, $x);
}

以下是对阵列进行排序的方法: $template数组:

//template array
$reference = array('sn', 'name', 'somenumber');
$array_to_sort = Array
(
    "0" => Array
        (
            "somenumber" => "Name1",
            "sn" => "Sn1",
            "name" => "43234234"
        ),

    "1" => Array
        (
            "sn" => "Name2",
            "somenumber" => "4564564",
            "name" => "Sn2"
        ),

    "2" => Array
        (
            "sn" => "Name3",
            "name" => "Sn3",
            "somenumber" => "6575647456745"
        )
);
    $ordered_array = [];
    foreach ($array_to_sort as $key => $value) {
      $ordered_array[] = array_replace(array_flip($reference), $value);
    }

    print_r($ordered_array);

除非我遗漏了什么,否则你问题中的第一个和最后一个数组是相同的。使用
print\r
时它们的显示方式其实并不重要,也不应该如此,因为索引和值都是相同的,所以数组也是相同的。我使用这个数组在带有phpexcel的xls文件中导出。它根据键的顺序生成xls,我需要一个不同的顺序。正如你所说,数据是一样的。这很好,但是$x只包含数组中的最后一项。我是根据你的回答做这个的:$I=0;$I