类似于问题: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"
}
我的预期,为什么?
答案 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);