Php 将按值匹配的数组合并到新数组中
我有一个简单的数组$simpleArray,里面有IDPhp 将按值匹配的数组合并到新数组中,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"
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);