Php Codeigniter-使用条件合并多个关联数组

Php Codeigniter-使用条件合并多个关联数组,php,arrays,codeigniter,merge,associative-array,Php,Arrays,Codeigniter,Merge,Associative Array,我需要将多个数组合并到一个特定键及其值相同的数组中。这是样品阵列1 array(n) { [0]=> array { ["a"]=> "m1" ["b"]=> "x2" } [1]=> array { ["a"]=> "n1" ["b"]=> "y2" } .... 带有一个公共密钥和其他不同密钥的示例_Array2 array(n) { [0]=> array { ["b"]=> "x2" ["c"]=> "p1" } [1]

我需要将多个数组合并到一个特定键及其值相同的数组中。这是样品阵列1

array(n) {
[0]=> array {
 ["a"]=> "m1"
 ["b"]=> "x2"
}
[1]=> array {
 ["a"]=> "n1"
 ["b"]=> "y2"
} ....
带有一个公共密钥和其他不同密钥的示例_Array2

array(n) {
[0]=> array {
 ["b"]=> "x2"
 ["c"]=> "p1"
}
[1]=> array {
 ["b"]=> "x2"
 ["d"]=> "q1"
}
[2]=> array {
 ["b"]=> "y2"
 ["e"]=> "r1"
} ....
需要将Sample_Array2合并/附加到Sample_Array1,其中键“b”及其值相同。预期产出:

array(n) {
[0]=>
array(2) {
 ["a"]=> "m1"
 ["b"]=> "x2"
 ["c"]=> "p1"
 ["d"]=> "q1"
}
[1]=>
array(2) {
 ["a"]=> "n1"
 ["b"]=> "y2"
 ["e"]=> "r1"
} ....  
我试过很多类似的问题,但都找不到确切的结果。
这个链接上给出的答案并不是为了解决这个问题,而是为每个新密钥创建不同的数组,而我需要将新密钥附加到一个数组中。

我真的不知道您想要在这里实现什么-但是根据您的描述,下面的代码可以工作

$arrA = [
    0   =>
    [
        'a' => 'm1',
        'b' => 'x2'
    ],
    1   =>
    [
        'a' => 'n1',
        'b' => 'y2'
    ]
];

$arrB = [
    0 =>
    [
        'b' => 'x2',
        'c' => 'p1',
    ],
    1 =>
    [
        'b' => 'x2',
        'd' => 'q1',
    ],
    2 =>
    [
        'b' => 'y2',
        'e' => 'r1',
    ],
];

foreach($arrB AS $arrData)
{
    foreach($arrData AS $key => $val)
    {
        if ((isset($arrData['a']) && $arrData['a'] == $arrA[0]['a']) || (isset($arrData['b']) && $arrData['b'] == $arrA[0]['b']))
        {
            $arrA[0][$key] = $val;
        }
        elseif ((isset($arrData['b']) && $arrData['b'] == $arrA[1]['a']) || (isset($arrData['b']) && $arrData['b'] == $arrA[1]['b']))
        {
            $arrA[1][$key] = $val;
        }
    }
}

print_r($arrA);

我真的不知道您想要在这里实现什么-但是根据您的描述,下面的代码可以工作

$arrA = [
    0   =>
    [
        'a' => 'm1',
        'b' => 'x2'
    ],
    1   =>
    [
        'a' => 'n1',
        'b' => 'y2'
    ]
];

$arrB = [
    0 =>
    [
        'b' => 'x2',
        'c' => 'p1',
    ],
    1 =>
    [
        'b' => 'x2',
        'd' => 'q1',
    ],
    2 =>
    [
        'b' => 'y2',
        'e' => 'r1',
    ],
];

foreach($arrB AS $arrData)
{
    foreach($arrData AS $key => $val)
    {
        if ((isset($arrData['a']) && $arrData['a'] == $arrA[0]['a']) || (isset($arrData['b']) && $arrData['b'] == $arrA[0]['b']))
        {
            $arrA[0][$key] = $val;
        }
        elseif ((isset($arrData['b']) && $arrData['b'] == $arrA[1]['a']) || (isset($arrData['b']) && $arrData['b'] == $arrA[1]['b']))
        {
            $arrA[1][$key] = $val;
        }
    }
}

print_r($arrA);

假设您在所有子数组中都有
“b”
索引,这应该是可行的

$array1 = array();
$array1[] = array("a" => "m1", "b" => "x2", "c" => null);
$array1[] = array("a" => "n1", "b" => "y2");

$array2 = array();
$array2[] = array("b" => "x2", "c" => "p1");
$array2[] = array("a" => null, "b" => "x2", "d" => "q1");
$array2[] = array("b" => "y2", "e" => "r1");



function merge_on_key($array1, $array2, $key) {
    $result_array = array();
    foreach($array1 as $key1 => $sub_array1) {
        $merged_array = array();
        $sub_array1  = array_filter($sub_array1);
        foreach($array2 as $key2 => $sub_array2) {
            $sub_array2  = array_filter($sub_array2);
            if($sub_array1[$key] == $sub_array2[$key]) {
                $merged_array = array_merge($sub_array1, $sub_array2, $merged_array);
                unset($array2[$key2]);
            }
        }
        if (!empty($merged_array)) {
            $result_array[] = $merged_array;
        }
    }
    return array_merge($result_array, $array2);
}

$final_array = merge_on_key($array1, $array2, "b");

print_r($final_array);
如果您也必须匹配
$array1
本身中的
“b”
索引,则只需使用它两次:

$array1 = merge_on_key($array1, $array1, "b");
$final_array = merge_on_key($array1, $array2, "b");

假设您在所有子数组中都有
“b”
索引,这应该是可行的

$array1 = array();
$array1[] = array("a" => "m1", "b" => "x2", "c" => null);
$array1[] = array("a" => "n1", "b" => "y2");

$array2 = array();
$array2[] = array("b" => "x2", "c" => "p1");
$array2[] = array("a" => null, "b" => "x2", "d" => "q1");
$array2[] = array("b" => "y2", "e" => "r1");



function merge_on_key($array1, $array2, $key) {
    $result_array = array();
    foreach($array1 as $key1 => $sub_array1) {
        $merged_array = array();
        $sub_array1  = array_filter($sub_array1);
        foreach($array2 as $key2 => $sub_array2) {
            $sub_array2  = array_filter($sub_array2);
            if($sub_array1[$key] == $sub_array2[$key]) {
                $merged_array = array_merge($sub_array1, $sub_array2, $merged_array);
                unset($array2[$key2]);
            }
        }
        if (!empty($merged_array)) {
            $result_array[] = $merged_array;
        }
    }
    return array_merge($result_array, $array2);
}

$final_array = merge_on_key($array1, $array2, "b");

print_r($final_array);
如果您也必须匹配
$array1
本身中的
“b”
索引,则只需使用它两次:

$array1 = merge_on_key($array1, $array1, "b");
$final_array = merge_on_key($array1, $array2, "b");

创建了与您类似的阵列
$new_array
是您要查找的结果数组

$a=array();
$a[0]=数组('a'=>'m1','b'=>'x2');
$a[1]=数组('a'=>'n1','b'=>'y2');
$b=数组();
$b[0]=数组('b'=>'x2','c'=>'p1');
$b[1]=数组('b'=>'x2','d'=>'q1');
$b[2]=数组('b'=>'y2','e'=>'r1');
foreach($行){
//回显“”;打印($row);
foreach($b为$c=>$row1){
//echo“”;print_r($row1);echo$c;die;
如果($row['b']=$row1['b']){
$new_array[]=数组合并($row,$row1);
}
}
}回声';打印(新阵列);

创建了与您类似的阵列
$new_array
是您要查找的结果数组

$a=array();
$a[0]=数组('a'=>'m1','b'=>'x2');
$a[1]=数组('a'=>'n1','b'=>'y2');
$b=数组();
$b[0]=数组('b'=>'x2','c'=>'p1');
$b[1]=数组('b'=>'x2','d'=>'q1');
$b[2]=数组('b'=>'y2','e'=>'r1');
foreach($行){
//回显“”;打印($row);
foreach($b为$c=>$row1){
//echo“”;print_r($row1);echo$c;die;
如果($row['b']=$row1['b']){
$new_array[]=数组合并($row,$row1);
}
}
}回声';打印(新阵列);


做一些foreach循环。所有子数组中都有“b”索引吗?@NeilPatrao yeah“b”对MatchOok来说是常见的。那我的工作就可以了。做一些foreach循环。所有子数组中都有“b”索引吗?@NeilPatrao是的,“b”对matchOK来说是常见的。在这个问题中,是否可以在非空值上合并。。意味着如果两个数组中有几个键相同&其中一个值为null,则保留不为null的值。您可以过滤
子数组中的null值,然后合并。检查更新的答案。这是好的,但它删除的键与空值也<代码>$array1=array()$数组1[]=数组(“a”=>“m1”,“b”=>“x2”,“c”=>空,“d”=>“空”)$array2=数组()$array2[]=数组(“a”=>null,“b”=>x2”,“c”=>null,“d”=>q1”)需要输出为
数组(“a”=>m1,“b”=>x2”,“c”=>null,“d”=>q1”)此处所有数组段中的键数相同。由于此数组将通过codeigniter PHPExcel导出为Excel工作表,因此无法从任何数组中删除任何键。在此问题中,是否可以合并非空值。。意味着如果两个数组中有几个键相同&其中一个值为null,则保留不为null的值。您可以过滤
子数组中的null值,然后合并。检查更新的答案。这是好的,但它删除的键与空值也<代码>$array1=array()$数组1[]=数组(“a”=>“m1”,“b”=>“x2”,“c”=>空,“d”=>“空”)$array2=数组()$array2[]=数组(“a”=>null,“b”=>x2”,“c”=>null,“d”=>q1”)需要输出为
数组(“a”=>m1,“b”=>x2”,“c”=>null,“d”=>q1”)此处所有数组段中的键数相同。由于此数组将通过codeigniter PHPExcel导出为Excel工作表,因此无法从任何数组中删除任何键。