根据另一个阵列键的顺序对阵列​​键进行排序

时间:2018-10-30 17:06:22

标签: php arrays sorting

我有一个数组数据,每个数组obj都有不同的顺序

$array = array(
    type1 => array(
        'id' => 'w12',
        'name' => 'John Doe',
        'email' => 'john@example.com',
        'fname' => 'john',
        'phone' => '111',
        'age' => '22'
    ),
    type2 => array(
        'id' => 'w13',
        'name' => 'Jane Doe',
        'email' => 'jane@example.com',
        'age' => '22',
        'phone' => '111',
        'fname' => 'dsd'
    ),
);

我要按照以下数组键顺序的以下顺序对其进行排序

$array2 = [
    'fname' => 'fname',
    'phone' => 'phone111',
    'age' => 'age11',
    'email' => 'email11'
];

id和名称将始终以正确的顺序排列,我想根据$ array2的顺序设置其余部分。 请告诉我如何进行?

更新

object(SimpleXMLElement)#179 (2) {
  ["type1"]=>
  object(SimpleXMLElement)#110 (3) {
    ["id"]=>
    string(3) "333"
    ["name"]=>
    string(7) "#c32c2c"
    ["email"]=>
    object(SimpleXMLElement)#172 (0) {
    }
  }
  ["type2"]=>
  object(SimpleXMLElement)#64 (3) {
    ["id"]=>
    string(4) "w2we"
    ["phone"]=>
    string(7) "#98bb3e"
    ["name"]=>
    object(SimpleXMLElement)#172 (0) {
    }
  }
}

1 个答案:

答案 0 :(得分:1)

这是做到这一点的一种方法。

首先创建一个模板数组,该数组定义所需的顺序(包括id和name键,即使它们已经按正确的顺序排列)。

$order = [
    'id' => null,
    'name' => null,
    'fname' => null,
    'phone' => null,
    'age' => null,
    'email' => null
];

然后将数组中的每一行合并到模板上。模板的空值将替换为数组行中的值,但键将保持模板的顺序。

foreach ($array as $key => $row) {
    $ordered[$key] = array_merge($order, $row);
}

我展示了如何在这里用重新排序的行创建一个新数组。如果需要,可以通过将合并结果分配给$array[$key]来代替原始值。