Php 将按值匹配的数组合并到新数组中

Php 将按值匹配的数组合并到新数组中,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个简单的数组$simpleArray,里面有ID 1 id="1" 2 id="3" 3 id="7" 我有另一个数组$complexArray,里面有几个变量: 1 id="1" color="blue" size="7" height="10" 2 id="2" color="red" size="64" height="52" 3 id="3" color="pink"

我有一个简单的数组$simpleArray,里面有ID

1
   id="1"  
2
   id="3"  
3
   id="7" 
我有另一个数组$complexArray,里面有几个变量:

1
   id="1"  
   color="blue"
   size="7"
   height="10"
2
   id="2"  
   color="red"
   size="64"
   height="52"
3   
   id="3"  
   color="pink"
   size="72"
   height="39"
我想创建第三个数组$mixedArray,它是$complexArray的子集,如果id在$simpleArray中,那么该行将显示在$mixedArray中。在上面的示例中,新阵列将是:

$mixedArray =
1
    id="1"  
    color="blue"
    size="7"
    height="10"
2
    id="3"  
    color="pink"
    size="72"
    height="39"
我尝试了以下方法:

foreach ($simpleArray as $complexArray){

    $mixedArray [] = array("id"=>$complexArray['id'],
                           "color"=>$complexArray['color'],
                           "size"=>$complexArray['size'],
                           "height"=>$complexArray['height']); 
}

print_r($mixedArray);

您可以这样做:

$mixedArray = array();
foreach ($complexArray as $element){
    if(in_array($element['id'], $simpleArray)){
        array_push($mixedArray, $element);
    }
}
因此,它所做的是检查当前complexElement的id是否在simpleArray内,如果在simpleArray内,它会将该元素推入mixedArray中,请尝试以下逻辑:

检查复杂数组中的简单数组id,如果存在,则在mixedArray中分配。为此,您可以在数组中使用:如果在数组中找到值,则返回TRUE,否则返回FALSE

foreach ($complexArray AS $complexArray1){
if (in_array($complexArray1['id'], $simpleArray) {
$mixedArray [] = $complexArray1;
}
}
print_r($mixedArray);

试试这个,希望这会有帮助:

function  getMatching($id, $simpleArr){
    $found = 0;
    foreach($simpleArr as $v){
        if($v['id'] == $id){
           $found = 1; 
           break;
        }
    }
    return $found;
}
$mixedArr = array();
foreach($complexArr as $ck=>$cv){
    $match = getMatching($cv['id'], $simpleArr);
    if($match){
        $mixedArr[] = $cv;
    }
}
echo "<pre>"; print_r($mixedArr);
函数getMatching($id,$simpler){
$found=0;
foreach($v){
如果($v['id']=$id){
$found=1;
打破
}
}
返回$found;
}
$mixedArr=array();
foreach($complexArr作为$ck=>$cv){
$match=getMatching($cv['id'],$simplerr);
如果($match){
$mixedArr[]=$cv;
}
}
回声“;打印($mixedar);

解决这个问题有几种方法

您可以使用:

或者您可以使用:


下面是。

@ian您也可以使用foreach()和in_array()条件,借助array_column()完成此操作,如下所示:


你能编辑这篇文章并提出一个问题吗?为了简洁起见,更新了标题;为了可读性,更新了文本;代码中出现了换行符
$allowed = array_flip(array_column($simpleArray, 'id'));

$result = array_filter($complexArray, function ($item) use ($allowed) {
    return isset($allowed[$item['id']]);
});
$allowed = array_flip(array_column($simpleArray, 'id'));

$result = array_intersect_key(
    array_combine(array_column($complexArray, 'id'), $complexArray),
    $allowed
);
<?php
    foreach($complexArray  as $value){
        if(in_array($value["id"], array_column($simpleArray, "id"))){
            $mixedArray[] = $value;
        }
    }
    echo "<pre>";
    print_r($mixedArray);