Buscar..


Fusionar o concatenar matrices

$fruit1 = ['apples', 'pears'];
$fruit2 = ['bananas', 'oranges'];

$all_of_fruits = array_merge($fruit1, $fruit2);
// now value of $all_of_fruits is [0 => 'apples', 1 => 'pears', 2 => 'bananas', 3 => 'oranges']

Tenga en cuenta que array_merge cambiará los índices numéricos, pero sobrescribirá los índices de cadena

$fruit1 = ['one' => 'apples',  'two' => 'pears'];
$fruit2 = ['one' => 'bananas', 'two' => 'oranges'];

$all_of_fruits = array_merge($fruit1, $fruit2);
// now value of $all_of_fruits is ['one' => 'bananas', 'two' => 'oranges']

array_merge sobrescribe los valores de la primera matriz con los valores de la segunda matriz, si no puede renumerar el índice.

Puede usar el operador + para combinar dos matrices de manera que los valores de la primera matriz nunca se sobrescriban, pero no renumera los índices numéricos, por lo que pierde los valores de las matrices que tienen un índice que también se usa en la primera matriz .

$fruit1 = ['one' => 'apples',  'two' => 'pears'];
$fruit2 = ['one' => 'bananas', 'two' => 'oranges'];

$all_of_fruits = $fruit1 + $fruit2;
// now value of $all_of_fruits is ['one' => 'apples', 'two' => 'pears']

$fruit1 = ['apples', 'pears'];
$fruit2 = ['bananas', 'oranges'];

$all_of_fruits = $fruit1 + $fruit2;
// now value of $all_of_fruits is [0 => 'apples', 1 => 'pears']

Intersección de matriz

La función array_intersect devolverá una matriz de valores que existe en todas las matrices que se pasaron a esta función.

$array_one = ['one', 'two', 'three'];
$array_two = ['two', 'three', 'four'];
$array_three = ['two', 'three'];

$intersect = array_intersect($array_one, $array_two, $array_three);
// $intersect contains ['two', 'three']

Se conservan las claves de matriz. Los índices de las matrices originales no lo son.

array_intersect solo verifica los valores de los arrays. array_intersect_assoc función array_intersect_assoc devolverá la intersección de matrices con claves.

$array_one = [1 => 'one',2 => 'two',3 => 'three'];
$array_two = [1 => 'one', 2 => 'two', 3 => 'two', 4 => 'three'];
$array_three = [1 => 'one', 2 => 'two'];

$intersect = array_intersect_assoc($array_one, $array_two, $array_three);
// $intersect contains [1 =>'one',2 => 'two']

array_intersect_key función array_intersect_key solo verifica la intersección de claves. Se devolverán las claves que existen en todos los arrays.

$array_one = [1 => 'one',2 => 'two',3 => 'three'];
$array_two = [1 => 'one', 2 => 'two', 3 => 'four'];
$array_three = [1 => 'one', 3 => 'five'];

$intersect = array_intersect_key($array_one, $array_two, $array_three);
// $intersect contains [1 =>'one',3 => 'three']

Combinando dos matrices (claves de una, valores de otra)

El siguiente ejemplo muestra cómo combinar dos matrices en una matriz asociativa, donde los valores clave serán los elementos de la primera matriz, y los valores serán de la segunda:

$array_one = ['key1', 'key2', 'key3'];
$array_two = ['value1', 'value2', 'value3'];

$array_three = array_combine($array_one, $array_two);
var_export($array_three);

/* 
    array (
      'key1' => 'value1',
      'key2' => 'value2',
      'key3' => 'value3',
    )
*/

Cambio de una matriz multidimensional a matriz asociativa

Si tienes una matriz multidimensional como esta:

[
    ['foo',  'bar'],
    ['fizz', 'buzz'],
]

Y quieres cambiarlo a una matriz asociativa como esta:

[
    'foo'  => 'bar',
    'fizz' => 'buzz',
]

Puedes usar este código:

$multidimensionalArray = [
    ['foo',  'bar'],
    ['fizz', 'buzz'],
];
$associativeArrayKeys   = array_column($multidimensionalArray, 0);
$associativeArrayValues = array_column($multidimensionalArray, 1);
$associativeArray       = array_combine($associativeArrayKeys, $associativeArrayValues);

O bien, puede omitir la configuración de $associativeArrayKeys y $associativeArrayValues y usar este simple liner:

$associativeArray = array_combine(array_column($multidimensionalArray, 0), array_column($multidimensionalArray, 1));


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow