Пересечь и отсортировать массив по ключам на основе другого массива?

Похоже на вопрос: Сортировать массив по ключам на основе другого массива? только я хочу отбросить любые ключи, которые не являются общими.

По сути, я попытался отфильтровать переменные по ключам через 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

Решение

Это должно работать для вас:

<?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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]