我有一个数组数据,每个数组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) {
}
}
}
答案 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]
来代替原始值。