PHP array_merge with numerical keys

2019-01-18 08:17发布

How can make it so array_merge() overwrites two keys with different values but same key index from two arrays?

for example, merging:

[0] => 'whatever'

with

[0] => 'whatever', [1] => 'a', [2] => 'b'

should produce

[0] => 'whatever', [1] => 'a', [2] => 'b'

Basically I want array_merge to bahave the same way it behaves if the arrays have string keys...

8条回答
男人必须洒脱
2楼-- · 2019-01-18 08:56

Pretty easy to write manually:

function array_merge_custom($first, $second) {
    $result = array();
    foreach($first as $key => $value) {
        $result[$key] = $value;
    }
    foreach($second as $key => $value) {
        $result[$key] = $value;
    }

    return $result;
}

Update: This behaves differently than the union operator (return $first + $second;) because in this case the second array wins when both have elements with the same key.

However, if you switch the places of the arguments and place the array that you want to "win" in case of conflicts as the first operand, you can get the same behavior. So the function above behaves exactly like return $second + $first;.

查看更多
男人必须洒脱
3楼-- · 2019-01-18 08:56

array_replace does exactly this. See: http://php.net/manual/de/function.array-replace.php

查看更多
相关推荐>>
4楼-- · 2019-01-18 09:05

Use the + operator.

Compare array_merge to + operator:

<?php

$a1 = array(0=>"whatever",);
$a2 = array(0=>"whatever",1=>"a",2=>"b");

print_r(array_merge($a1,$a2));
print_r($a1+$a2);
?>

Output:

Array
(
    [0] => whatever
    [1] => whatever
    [2] => a
    [3] => b
)
Array
(
    [0] => whatever
    [1] => a
    [2] => b
)

The + operator still works if your associative array has the numerical keys out-of-order:

<?php

$a1 = array(0=>"whatever",);
$a2 = array(1=>"a",0=>"whatever",2=>"b");

print_r(array_merge($a1,$a2));
print_r($a1+$a2);
?>

Output:

Array
(
    [0] => whatever
    [1] => a
    [2] => whatever
    [3] => b
)
Array
(
    [0] => whatever
    [1] => a
    [2] => b
)

Notice array_merge in this case creates a new key. Not desirable...

查看更多
干净又极端
5楼-- · 2019-01-18 09:05
$arrA = [10, 11, 12];
$arrB = [12, 13];

$arrCommon = array_keys(array_flip($arrA) + array_flip($arrB));

print_r($arrCommon);
Array
(
    [0] => 10
    [1] => 11
    [2] => 12
    [3] => 13
)

Compare to WRONG use of "+"

$arrCommon = $arrA + $arrB;

print_r($arrCommon);
Array
(
    [0] => 10
    [1] => 11
    [2] => 12
)
查看更多
迷人小祖宗
6楼-- · 2019-01-18 09:07

You could use array_merge() and then use array_unique().

查看更多
Deceive 欺骗
7楼-- · 2019-01-18 09:09
function array_merge_custom()
{
    $array      = array();
    $arguments  = func_num_args();
    foreach($arguments as $args)
        foreach($args as $key => $value)
            $array[$key] = $value;
    return $array;
}
查看更多
登录 后发表回答