Php 仅当两个数组的键索引匹配时才组合它们

Php 仅当两个数组的键索引匹配时才组合它们,php,arrays,Php,Arrays,我想组合这些数组: $arr1 = array(1 => "a", 2 => "b", 3 => "c", 4 => "d"); $arr2 = array(1 => 5, 3 => 7, 4 => 9); $arr3 = array("a" => 5, "c" => 7, d => 9); 我想要这个: $arr1 = array(1 => "a", 2 => "b", 3 => "c", 4 => "d"

我想组合这些数组:

$arr1 = array(1 => "a", 2 => "b", 3 => "c", 4 => "d");
$arr2 = array(1 => 5, 3 => 7, 4 => 9);
$arr3 = array("a" => 5, "c" => 7, d => 9);
我想要这个:

$arr1 = array(1 => "a", 2 => "b", 3 => "c", 4 => "d");
$arr2 = array(1 => 5, 3 => 7, 4 => 9);
$arr3 = array("a" => 5, "c" => 7, d => 9);
我想忽略$arr1上的键索引“2”,因为它在$arr2上不存在

因此,我只想在键索引匹配的情况下进行组合,只组合具有相同原始键的值。

给你

<?php
$arr1 = array(1 => "a", 2 => "b", 3 => "c", 4 => "d");
$arr2 = array(1 => 5, 3 => 7, 4 => 9);
$arr3 = array();
foreach ($arr1 as $key => $value) {
    if(isset($arr2[$key])){
        $arr3[$value] = $arr2[$key];
    }
}

print_r($arr3);
?>

您可以这样做,它没有经过测试,但我认为它可以工作。阿德里安说的话看起来更好。我没有使用foreach($array as$key=>$val)。那更好

试试这个

使用“数组\密钥\存在”


数组([a]=>5[c]=>7[d]=>9)

您可以尝试以下方法:

function combineArrays( $array1, $array2 ){
    $array3 = array();
    foreach ($array1 as $key => $value) {

        if( isset($array2[$key]) ) { $array3[$value] = $array2[$key]; }

    }

    return $array3;
}
像这样使用它:

$arr3 = combineArrays($arr1, $arr2);
试试这个:

$arr1 = array(1 => "a", 2 => "b", 3 => "c", 4 => "d");
$arr2 = array(1 => 5, 3 => 7, 4 => 9);
$result = array_combine(array_intersect_key($arr1, $arr2), $arr2);
产生:

Array
(
    [a] => 5
    [c] => 7
    [d] => 9
)

使用数组\u键的简单方法\u存在:

$arr1=数组(1=>“a”,2=>“b”,3=>“c”,4=>“d”)

$arr2=数组(1=>5,3=>7,4=>9)


数组([a]=>5[c]=>7[d]=>9)

你试过什么吗?
$res=[];foreach($arr2 as$k=>$v){$res[$arr1[$k]]]=$v;}
在$arr2之间循环更符合逻辑。在这种情况下没有关系,但在更大的阵列中效率更高。您好@Christian,您说得对,在这种情况下更符合逻辑,我更新了我的答案,谢谢。
$new = array();
foreach ($arr2 as $key => $value) {
     if(array_key_exists($key, $arr1)) {
         $array[$arr1[$key]] = $arr2[$key];
     }
}

 print_r($array);