PHP
Обработка нескольких массивов вместе
Поиск…
Объединить или объединить массивы
$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']
Обратите внимание, что array_merge
изменяет числовые индексы, но перезаписывает строковые индексы
$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
перезаписывает значения первого массива со значениями второго массива, если он не может перенумеровать индекс.
Вы можете использовать оператор +
чтобы объединить два массива таким образом, чтобы значения первого массива никогда не перезаписывались, но они не перенумеровали числовые индексы, поэтому вы теряете значения массивов, которые имеют индекс, который также используется в первом массиве ,
$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']
Пересечение массива
Функция array_intersect
вернет массив значений, которые существуют во всех массивах, которые были переданы этой функции.
$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']
Клавиши массива сохраняются. Индексами из исходных массивов нет.
array_intersect
проверяет только значения массивов. Функция array_intersect_assoc
вернет пересечение массивов с помощью ключей.
$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
проверяет только пересечение ключей. Он будет возвращать ключи во всех массивах.
$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']
Объединение двух массивов (ключи от одного, значения от другого)
В следующем примере показано, как объединить два массива в один ассоциативный массив, где ключевыми значениями будут элементы первого массива, а значения будут от второго:
$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',
)
*/
Изменение многомерного массива на ассоциативный массив
Если у вас многомерный массив:
[
['foo', 'bar'],
['fizz', 'buzz'],
]
И вы хотите изменить его на ассоциативный массив следующим образом:
[
'foo' => 'bar',
'fizz' => 'buzz',
]
Вы можете использовать этот код:
$multidimensionalArray = [
['foo', 'bar'],
['fizz', 'buzz'],
];
$associativeArrayKeys = array_column($multidimensionalArray, 0);
$associativeArrayValues = array_column($multidimensionalArray, 1);
$associativeArray = array_combine($associativeArrayKeys, $associativeArrayValues);
Или вы можете пропустить установку $associativeArrayKeys
и $associativeArrayValues
и использовать этот простой один лайнер:
$associativeArray = array_combine(array_column($multidimensionalArray, 0), array_column($multidimensionalArray, 1));