5

我想联合 2 数组$A$B示例:

$A = Array(
    0=>array(
            'lable' =>"label0",
            'id_poste'=>1,
            'id_part'=>11
    ),
    1=>array(
            'lable' =>"label1",
            'id_poste'=>2,
            'id_part'=>12
            ),
    2=>array(
            'lable' =>"label2",
            'id_poste'=>3,
            'id_part'=>13
    ),
    3=>array(
            'lable' =>"label3",
            'id_poste'=>4,
            'id_part'=>14
            )
);

$B = Array(
    0=>array(
            'lable' =>"label0",
            'id_poste'=>1,
            'id_part'=>11
    ),
    1=>array(
            'lable' =>"label1_X",
            'id_poste'=>2,
            'id_part'=>12
            ),
    2=>array(
            'lable' =>"label2",
            'id_poste'=>3,
            'id_part'=>13
    ),
    3=>array(
            'lable' =>"label3_X",
            'id_poste'=>4,
            'id_part'=>14
            )
);

这两个数组之间联合的结果将是

/*
$result => Array(
    0=>array(
            'lable' =>"label0",
            'id_poste'=>1,
            'id_part'=>11
    ),
    1=>array(
            'lable' =>"label1",
            'id_poste'=>2,
            'id_part'=>12
            ),
    2=>array(
            'lable' =>"label1_X",
            'id_poste'=>2,
            'id_part'=>12
            )       
    3=>array(
            'lable' =>"label2",
            'id_poste'=>3,
            'id_part'=>13
    ),
    4=>array(
            'lable' =>"label3",
            'id_poste'=>4,
            'id_part'=>14
            ),
    5=>array(
            'lable' =>"label3_X",
            'id_poste'=>4,
            'id_part'=>14
            )
);
*/

我试过了:

$C = $A+$B;
echo '<pre>';
print_r($C);
echo '</pre>'

但结果不是我预期的?有人可以帮忙吗?

谢谢

EIDT:

如果使用array_merge($A, $B);

Array
(
[0] => Array
    (
        [lable] => label0
        [id_poste] => 1
        [id_part] => 11
    )

[1] => Array
    (
        [lable] => label1
        [id_poste] => 2
        [id_part] => 12
    )

[2] => Array
    (
        [lable] => label2
        [id_poste] => 3
        [id_part] => 13
    )

[3] => Array
    (
        [lable] => label3
        [id_poste] => 4
        [id_part] => 14
    )

[4] => Array
    (
        [lable] => label0
        [id_poste] => 1
        [id_part] => 11
    )

[5] => Array
    (
        [lable] => label1_X
        [id_poste] => 2
        [id_part] => 12
    )

[6] => Array
    (
        [lable] => label2
        [id_poste] => 3
        [id_part] => 13
    )

[7] => Array
    (
        [lable] => label3_X
        [id_poste] => 4
        [id_part] => 14
    )

)

就像我们在这里看到的数组是重复的:所以我们使用array_unique但是我们仍然得到一个错误或警告。

Array to string conversion in C:\Program Files\EasyPHP-12.1\www\PHP\array_union.php on line 86

4

5 回答 5

6

我得到了一个有点棘手的解决方案。我将合并 A 及其与 B 的差异。为了确定这种差异,我使用 array_udiff:我认为这很棘手,因为它依赖于带有标签键的标识。

$C = array_merge($A, 
            array_udiff($B, $A, 
                        function($a,$b){
                            return strcmp($a['lable'],$b['lable']);
                        }
           )
);
于 2012-12-11T07:31:40.330 回答
0
array_merge($A, $B);

是你要找的

于 2012-12-11T07:11:02.993 回答
0

用于array_merge()此目的

$C = array_merge($A,$B);
echo '<pre>';
print_r($C);
echo '</pre>'

请参阅工作示例http://codepad.viper-7.com/LrVHn3

于 2012-12-11T07:11:23.110 回答
0

你可以用array_merge()这个..因为你需要删除重复项,你还必须使用array_unique()....

$C = array_unique(array_merge($A,$B), SORT_REGULAR);
echo '<pre>';
print_r($C);
echo '</pre>'

请参阅array_uniquearray_merge

它给了我正确的结果

Array
(
    [0] => Array
        (
            [lable] => label0
            [id_poste] => 1
            [id_part] => 11
        )

    [1] => Array
        (
            [lable] => label1
            [id_poste] => 2
            [id_part] => 12
        )

    [2] => Array
        (
            [lable] => label2
            [id_poste] => 3
            [id_part] => 13
        )

    [3] => Array
        (
            [lable] => label3
            [id_poste] => 4
            [id_part] => 14
        )

    [5] => Array
        (
            [lable] => label1_X
            [id_poste] => 2
            [id_part] => 12
        )

    [7] => Array
        (
            [lable] => label3_X
            [id_poste] => 4
            [id_part] => 14
        )

)
于 2012-12-11T07:15:41.403 回答
0
<?php

$input = array_merge( $A, $B );
$input = array_map( "unserialize", array_unique(array_map("serialize", $input)) );

var_dump( $input );
于 2012-12-11T07:50:49.667 回答