<?
//есть два исходных массива, первый из которых будет служить ключами, а второй значениями
//очень ВАЖНО при этом, что мы точно знаем, что каждый индекс первого массива,
//имеет соответствие во втором массиве, находящемся под этим же индексом
$a = array('key 1', 'key 2', 'key 3', 'key 4'); //будут ключами после комбинирования
$b = array('var 1', 'var 2', 'var 3', 'var 4', 'var 5', 'var 6'); //будут значениями после комбинирования
//второй массив имеет большее количество, чем первый, но значения каждого под "правильными" для нас индексами
//первый массив - это приоритетный массив, ОН определяет массив результирующий, поэтому:
if(sizeof($b) >= sizeof($a)) { //количество элементов массива значений не менее массива ключей, комбинируем
$m = array_combine($a, array_splice($b, 0, sizeof($a)));
} else { //количество элементов массива значений меньше количества элементов ключей
//как поступить:
//зная, что индексы каждого массива следуют строго по порядку, и "пусто" только в конце
//получаем уже ключ как срез из массива ключей по размеру массива значений
$m = array_combine(array_splice($a, 0, sizeof($b)), $b);
}
//результат
print_r($m);
//но это, если нет "пусто" в середине какого либо из массивов
//для того чтобы сказать - "надо действовать так", нужно знать все else, которые могут возникать при получении массивов из строк
//предположим, что элементы массива ключей будут присутствовать всегда
//а вот строка описывающая этот ключ нет, то есть в массиве элементов могут быть пустоты,
//и не обязательно по порядку и только в конце, а по любому смещению
//в этом случае приоритетным является массив значений, он будет определять массив результирующий
//пусть в результате мы получили вот такие массивы
$a = array('key 1', 'key 2', 'key 3', 'key 4', 'key 5', 'key 6'); //будут ключами после комбинирования
$b = array('var 1', '', 'var 3', ' ', 'var 5', ''); //будут значениями после комбинирования
//количество элементов у обоих одинаково, но есть пустоты в массиве значений
//удалим пустые элементы из массива значений
$b = array_diff(array_map('trim', $b), array(''));
//очищенный массив сохранит индексы своих элементов
print_r($b);
//а значит, зная, что массив ключей не может иметь пустот,
//просто выбираем из него ключи для очищенного массива значений
//делается это пересечением массива по ключу
//и сразу комбинируем
$m = array_combine(array_intersect_key($a, $b), $b);
//результат
print_r($m);
//если и в массиве ключей тоже могут быть пустоты
//то его надо тоже очистить от пустых элементов
//а далее как выше - пересечение массивов
$a = array('key 1', 'key 2', ' ', 'key 4', '', 'key 6'); //будут ключами после комбинирования
$b = array('var 1', '', 'var 3', ' ', 'var 5', ''); //будут значениями после комбинирования
//удаляем пустоты
$a = array_diff(array_map('trim', $a), array(''));
$b = array_diff(array_map('trim', $b), array(''));
//что получаем
print_r($a);
print_r($b);
//пересечение даст нам следующие
print_r(array_intersect_key($a, $b));
//поэтому итоговый будет
$a = array_intersect_key($a, $b);
$m = array_combine($a, array_intersect_key($b, $a));
//результат
print_r($m);
|