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

Я хочу сохранить определенные значения из $_POST в файл. Но я хочу только значения, где ключ находится в массиве $lang,

В качестве примера:

$_POST = [1 => "a", 2 => "b", 3 => "c"];
$lang = [2, 3];

С этим входом я хотел бы только значения из $_POST где ключ находится в $lang массив.

Ожидаемый результат будет:

[2 => "b", 3 => "c"]

Прямо сейчас я пытаюсь заархивировать это, используя ArrayIterator а также MultipleIterator, но это проходит через оба массива:

$post = new ArrayIterator($_POST);
$lang_array = new ArrayIterator($lang);
$it = new MultipleIterator;
$it->attachIterator($post);
$it->attachIterator($lang_array);
$fh = fopen('name.php', 'w');
foreach($it as $e) {
fwrite($fh , $e[1] .'-' . $e[0] );
fwrite($fh ,"\n" );
}

Так что я немного застрял, как решить эту проблему?

0

Решение

Попробуй это :

// Combining both arrays into one.
$combined_array = array_merge($_POST, $lang);
$fh = fopen('name.php', 'w');
foreach($combined_array as $key => $value){
fwrite($fh , $key .'-' . $value );
fwrite($fh ,"\n" );
}
1

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

Поскольку вы хотите пересечение двух массивов по ключам, вы можете использовать array_intersect_key(), но так как ключи являются значениями в $lang вам просто нужно сначала перевернуть array_flip(), например

print_r(array_intersect_key($_POST, array_flip($lang)));
1

объединение двух массивов, пожалуйста, попробуйте этот код: —

<?php
$fname=array("Peter","Ben","Joe");
$age=array("35","37","43");
$c=array_combine($fname,$age);
print_r($c);
?>

и два массива объединяются: —

<?php
$a1=array("red","green");
$a2=array("blue","yellow");
print_r(array_merge($a1,$a2));
?>

этот код полезен для объединения и объединения двух массивов

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