PHP按子集排序数组

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)

Dog*_*ert 5

简单的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)


hak*_*kre 1

$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数组的数组运算符+