her*_*rpy 7 php arrays sorting subset
我有两个数组.
一个是更大的数据:
Array
(
[12] => blah
[36] => foo
[58] => blah
[60] => blah
[72] => blah
[90] => bar
)
Run Code Online (Sandbox Code Playgroud)
另一个是不同但相关数据的较小子集,顺序不同,每个键对应于较大数组中的相同键:
Array
(
[36] => foo data
[90] => bar data
[12] => blah data
)
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是,如何使第一个数组处于这样的顺序,以便第一个数组中第二个数组中具有相应键的键将首先显示,并且与第二个数组的顺序相同?
因此,像这样:
Array
(
[36] => foo
[90] => bar
[12] => blah
[58] => blah
[60] => blah
[72] => blah
)
Run Code Online (Sandbox Code Playgroud)
简单的O(n)解决方案.
$arr1 = array(12 => 1, 36 => 2, 58 => 3, 60 => 4, 72 => 5);
$arr2 = array(36 => 1, 60 => 2, 12 => 1);
$result = array();
foreach($arr2 as $key => $value) {
$result[$key] = $arr1[$key];
unset($arr1[$key]);
}
foreach($arr1 as $key => $value) {
$result[$key] = $arr1[$key];
}
var_dump($result);
Run Code Online (Sandbox Code Playgroud)
输出:
array(5) {
[36]=>
int(2)
[60]=>
int(4)
[12]=>
int(1)
[58]=>
int(3)
[72]=>
int(5)
}
Run Code Online (Sandbox Code Playgroud)
$array1 = array(12 => 1, 36 => 2, 58 => 3, 60 => 4, 72 => 5);
$array2 = array(36 => 1, 60 => 2, 12 => 1);
# obtaining keys in the order of question
$result = array_intersect_key($array2, $array1);
# assign values from original $array1
foreach($result as $key => &$value) {
$value = $array1[$key];
}
unset($value); # kill reference for safety
# add missing elements from $array1
$result += $array1;
var_dump($result);
Run Code Online (Sandbox Code Playgroud)
输出:
array(5) {
[36]=>
int(2)
[60]=>
int(4)
[12]=>
int(1)
[58]=>
int(3)
[72]=>
int(5)
}
Run Code Online (Sandbox Code Playgroud)
请参阅for数组的数组运算符+。