我有一个多维数组,我想用数组定义每个subArray的键的顺序。让我举个例子。
输入数组:
$array = array( array( "version" => 1, "IP" => 1111, "name" => "bbb"), array( "version" => 3, "IP" => 1112, "name" => "aaa"), array( "version" => 2, "IP" => 1113, "name" => "ccc") );
我想做这样的事情:
$a_array = sort_headers($array, array("name", "version", "IP"));
我的预期输出是(看看按照上面传递的数组改变了键的顺序):
$a_array = array( array("name" => "bbb", "version" => 1, "IP" => 1111), array("name" => "aaa", "version" => 3, "IP" => 1112), array("name" => "ccc", "version" => 2, "IP" => 1113) );
如果答案是代码较少或最佳优化答案,那就太棒了!
答案 0 :(得分:1)
这应该适合你:
为每个subArray使用array_replace()
重新排列元素。使用$header
作为第一个参数并使用array_flip()
它,以便值是键,它们定义键的顺序。
然后在数组($header
)中找到的每个键都将填充它的值(每个subArray,$v
)。
例如:
Header / Key order:
Array ( [name] => [version] => [IP] => )
↑ ↑ ↑
└──┐ │ ┌─┘
┌──┼───────────┘ │
│ └───────────────────┼──┐
│ ┌───────────┘ │
| │ |
Array ( [version] => 1 [IP] => 1111 [name] => bbb )
(Each) Array:
---------------------
Result:
Array ( [name] => bbb [version] => 1 [IP] => 1111 )
代码:
<?php
$header = array("name", "version", "IP");
$array = array_map(function($v)use($header){
return array_replace(array_flip($header), $v);
}, $array);
?>