如何追加一个数组到另一个没有比较他们的键?

$a = array( 'a', 'b' );
$b = array( 'c', 'd' );

最后应该是:阵列([0]= > [1]= > b [2] = > c [3] = > d) 如果我使用类似[]或array_push的东西,它会导致以下结果之一:

Array( [0]=>a [1]=>b [2]=>Array( [0]=>c [1]=>d ) )
//or
Array( [0]=>c [1]=>d )

它应该是这样做的,但是以一种更优雅的方式:

foreach ( $b AS $var )
    $a[] = $var;

当前回答

这是一篇相当老的文章,但我想添加一些关于将一个数组附加到另一个数组的东西:

If

一个或两个数组都有关联键 两个数组的键都不重要

你可以像这样使用数组函数:

array_merge(array_values($array), array_values($appendArray));

array_merge不合并数字键,所以它附加$appendArray的所有值。当使用原生php函数而不是foreach-loop时,它应该在包含大量元素的数组上更快。

除了2019-12-13: 从PHP 7.4开始,就有可能以数组展开操作符的方式追加或前置数组:

    $a = [3, 4];
    $b = [1, 2, ...$a];

和以前一样,这个新功能的键可能是一个问题:

    $a = ['a' => 3, 'b' => 4];
    $b = ['c' => 1, 'a' => 2, ...$a];

"致命错误:未捕获错误:无法解包包含字符串键的数组"

    $a = [3 => 3, 4 => 4];
    $b = [1 => 1, 4 => 2, ...$a];

阵列(4){ [1] = > int (1) [4] = > int (2) [5] = > int (3) [6] = > int (4) }

    $a = [1 => 1, 2 => 2];
    $b = [...$a, 3 => 3, 1 => 4];

数组(3){ [0] = > int (1) [1] = > int (4) [3] = > int (3) }

其他回答

在PHP 5.6+中,另一种方法是使用…令牌

$a = array('a', 'b');
$b = array('c', 'd');

array_push($a, ...$b);

// $a is now equals to array('a','b','c','d');

这也适用于任何可穿越的

$a = array('a', 'b');
$b = new ArrayIterator(array('c', 'd'));

array_push($a, ...$b);

// $a is now equals to array('a','b','c','d');

警告:

在7.3之前的PHP版本中,如果$b是空数组或不可遍历(例如不是数组),这将导致致命错误 在PHP 7.3中,如果$b不可遍历,将会引发警告

在PHP7之前,你可以使用:

array_splice($a, count($a), 0, $b);

Array_splice()操作引用数组(第一个参数),并将数组(第四个参数)的值放置在从第二个参数和第三个参数开始的值列表中。当我们将第2个参数设置为源数组的结束,第3个参数设置为零时,我们将第4个参数值附加到第1个参数

<?php
// Example 1 [Merging associative arrays. When two or more arrays have same key
// then the last array key value overrides the others one]

$array1 = array("a" => "JAVA", "b" => "ASP");
$array2 = array("c" => "C", "b" => "PHP");
echo " <br> Example 1 Output: <br>";
print_r(array_merge($array1,$array2));

// Example 2 [When you want to merge arrays having integer keys and
//want to reset integer keys to start from 0 then use array_merge() function]

$array3 =array(5 => "CSS",6 => "CSS3");
$array4 =array(8 => "JAVASCRIPT",9 => "HTML");
echo " <br> Example 2 Output: <br>";
print_r(array_merge($array3,$array4));

// Example 3 [When you want to merge arrays having integer keys and
// want to retain integer keys as it is then use PLUS (+) operator to merge arrays]

$array5 =array(5 => "CSS",6 => "CSS3");
$array6 =array(8 => "JAVASCRIPT",9 => "HTML");
echo " <br> Example 3 Output: <br>";
print_r($array5+$array6);

// Example 4 [When single array pass to array_merge having integer keys
// then the array return by array_merge have integer keys starting from 0]

$array7 =array(3 => "CSS",4 => "CSS3");
echo " <br> Example 4 Output: <br>";
print_r(array_merge($array7));
?>

输出:

Example 1 Output:
Array
(
[a] => JAVA
[b] => PHP
[c] => C
)

Example 2 Output:
Array
(
[0] => CSS
[1] => CSS3
[2] => JAVASCRIPT
[3] => HTML
)

Example 3 Output:
Array
(
[5] => CSS
[6] => CSS3
[8] => JAVASCRIPT
[9] => HTML
)

Example 4 Output:
Array
(
[0] => CSS
[1] => CSS3
)

参考源代码

Array_merge是一种优雅的方式

$a = array('a', 'b');
$b = array('c', 'd');
$merge = array_merge($a, $b); 
// $merge is now equals to array('a','b','c','d');

做这样的事情:

$merge = $a + $b;
// $merge now equals array('a','b')

将不起作用,因为+运算符实际上并没有合并它们。如果a和b有相同的键,它什么都不会做。

为什么不使用

$appended = array_merge($a,$b); 

你为什么不想用这个,正确的内置方法。