基于另一个数组按键对数组进行相交和排序?

时间:2015-01-06 00:30:26

标签: php arrays sorting filtering

类似于问题:Sort an Array by keys based on another Array?我只想删除任何不常见的密钥。

基本上我尝试通过array_intersect_key($VARIABLES, array_flip($signature_args));按键过滤变量,然后尝试使用array_merge(array_flip($signature_args), $filtered)对其进行排序

这里显示:

$VARIABLES = array('3'=>'4', '4'=>'5', '1'=>'2');
$signature_args = array('1', '2', '3');

$filtered = array_intersect_key($VARIABLES, array_flip($signature_args));
var_dump($filtered);

var_dump(array_merge(array_flip($signature_args), $filtered));

产生

array(2) {
  [3]=>
  string(1) "4"
  [1]=>
  string(1) "2"
}
array(5) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(2)
  [3]=>
  string(1) "4"
  [4]=>
  string(1) "2"
}

而不是

array(2) {
  [3]=>
  string(1) "4"
  [1]=>
  string(1) "2"
}
array(2) {
  [1]=>
  string(1) "2"
  [3]=>
  string(1) "4"
}

我的预期,为什么?

1 个答案:

答案 0 :(得分:1)

这应该适合你:

<?php

    $VARIABLES = array('3'=>'4', '4'=>'5', '1'=>'2');
    $signature_args = array('2', '3', '1');

    $filtered = array_intersect_key($VARIABLES, array_flip($signature_args));
    var_dump($filtered);

    $ordered = array();
    foreach ($signature_args as $key) {
        if(!empty($filtered[$key]))
        $ordered[$key] = $filtered[$key] ;
    }

    var_dump($ordered);

?>

或者如果你想要,你可以使用它:

array_walk($signature_args, function($key) { 
    if(!empty($filtered[$key])) $ordered[$key] = $filtered[$key] ;
}, $ordered);