Похоже на вопрос: Сортировать массив по ключам на основе другого массива? только я хочу отбросить любые ключи, которые не являются общими.
По сути, я попытался отфильтровать переменные по ключам через 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"}
что я ожидал, почему?
Это должно работать для вас:
<?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);
Других решений пока нет …